diff --git a/docs/reStructuredText/can-protocol.rst b/docs/reStructuredText/can-protocol.rst index 415aacec..66fec61f 100644 --- a/docs/reStructuredText/can-protocol.rst +++ b/docs/reStructuredText/can-protocol.rst @@ -59,8 +59,14 @@ For example, an Axis ID of :code:`0x01` with a command of :code:`0x0C` would be :code:`0x01 << 5 | 0x0C = 0x2C` +Messages ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +.. csv-table:: CAN Messages + :file: figures/can-protocol.csv + :header-rows: 1 +.. ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + All multibyte values are little endian (aka Intel format, aka least significant byte first). .. note:: diff --git a/docs/reStructuredText/control.rst b/docs/reStructuredText/control.rst index e5430561..4fa6277a 100644 --- a/docs/reStructuredText/control.rst +++ b/docs/reStructuredText/control.rst @@ -31,11 +31,10 @@ Position Control Loop -------------------------------------------------------------------------------- The position controller is a P loop with a single proportional gain, - .. math:: + .. code:: - \text{pos_error} &= \text{pos_setpoint} - \text{pos_feedback}, - - \text{vel_cmd} &= \text{pos_error} * \text{pos_gain} + \text{vel_feedforward}. + pos_error = pos_setpoint - pos_feedback, + vel_cmd = pos_error * pos_gain + vel_feedforward. Velocity Control Loop @@ -43,13 +42,11 @@ Velocity Control Loop The velocity controller is a PI loop where - .. math:: + .. code:: - \text{vel_error} &= \text{vel_cmd} - \text{vel_feedback}, - - \text{current_integral} &+= \text{vel_error} * \text{vel_integrator gain}, - - \text{current_cmd} &= \text{vel_error} * \text{vel_gain} + \text{current_integral} + \text{current_feedforward}. + vel_error = vel_cmd - vel_feedback, + current_integral += vel_error * vel_integrator gain, + current_cmd = vel_error * vel_gain + current_integral + current_feedforward. Current Control Loop @@ -57,15 +54,12 @@ Current Control Loop The current controller is also a PI loop, - .. math:: + .. code:: - \text{current_error} &= \text{current_cmd} - \text{current_feedback}, - - \text{voltage_integral} &+= \text{current_error} * \text{current_integrator gain}, - - \text{voltage_cmd} &= \text{current_error} * \text{current_gain} + \text{voltage_integral} + ... - - & ... + \text{voltage_feedforward} \textbf{ (when we have motor model)}. + current_error = current_cmd - current_feedback, + voltage_integral += current_error * current_integrator gain, + voltage_cmd = current_error * current_gain + voltage_integral + ... + ... + voltage_feedforward (when we have motor model). .. note:: `current_gain` and `current_integrator_gain` are automatically set according to :code:`motor.config.current_control_bandwidth` diff --git a/docs/reStructuredText/figures/pinout.csv b/docs/reStructuredText/figures/pinout.csv index 721c6bc6..81439cf0 100644 --- a/docs/reStructuredText/figures/pinout.csv +++ b/docs/reStructuredText/figures/pinout.csv @@ -1,18 +1,18 @@ #,Label,GPIO_MODE_DIGITAL,GPIO_MODE_ANALOG_IN,GPIO_MODE_UART_A,GPIO_MODE_UART_B,GPIO_MODE_PWM,GPIO_MODE_CAN_A,GPIO_MODE_I2C_A,GPIO_MODE_ENC0,GPIO_MODE_ENC1,GPIO_MODE_MECH_BRAKE 0,not a pin,,,,,,,,,, -1,GPIO1 (+),general purpose,analog input,UART_A.TX,,PWM0.0,,,,,mechanical brake -2,GPIO2 (+),general purpose,analog input,UART_A.RX,,PWM0.1,,,,,mechanical brake -3,GPIO3,general purpose,analog input,,UART_B.TX,PWM0.2,,,,,mechanical brake -4,GPIO4,general purpose,analog input,,UART_B.RX,PWM0.3,,,,,mechanical brake -5,GPIO5,general purpose,analog input (*),,,,,,,,mechanical brake -6,GPIO6 (*) (+),general purpose,,,,,,,,,mechanical brake -7,GPIO7 (*) (+),general purpose,,,,,,,,,mechanical brake -8,GPIO8 (*) (+),general purpose,,,,,,,,,mechanical brake -9,M0.A,general purpose,,,,,,,ENC0.A,, -10,M0.B,general purpose,,,,,,,ENC0.B,, -11,M0.Z,general purpose,,,,,,,,, -12,M1.A,general purpose,,,,,,I2C.SCL,,ENC1.A, -13,M1.B,general purpose,,,,,,I2C.SDA,,ENC1.B, -14,M1.Z,general purpose,,,,,,,,, -15,not exposed,general purpose,,,,,CAN_A.RX,I2C.SCL,,, -16,not exposed,general purpose,,,,,CAN_A.TX,I2C.SDA,,, \ No newline at end of file +1,GPIO1 (+),general purpose,analog input,**UART_A.TX**,,PWM0.0,,,,,mechanical brake +2,GPIO2 (+),general purpose,analog input,**UART_A.RX**,,PWM0.1,,,,,mechanical brake +3,GPIO3,general purpose,**analog input**,,**UART_B.TX**,PWM0.2,,,,,mechanical brake +4,GPIO4,general purpose,**analog input**,,**UART_B.RX**,PWM0.3,,,,,mechanical brake +5,GPIO5,general purpose,**analog input (*)**,,,,,,,,mechanical brake +6,GPIO6 (*) (+),**general purpose**,,,,,,,,,mechanical brake +7,GPIO7 (*) (+),**general purpose**,,,,,,,,,mechanical brake +8,GPIO8 (*) (+),**general purpose**,,,,,,,,,mechanical brake +9,M0.A,general purpose,,,,,,,**ENC0.A**,, +10,M0.B,general purpose,,,,,,,**ENC0.B**,, +11,M0.Z,**general purpose**,,,,,,,,, +12,M1.A,general purpose,,,,,,I2C.SCL,,**ENC1.A**, +13,M1.B,general purpose,,,,,,I2C.SDA,,**ENC1.B**, +14,M1.Z,**general purpose**,,,,,,,,, +15,not exposed,general purpose,,,,,**CAN_A.RX**,I2C.SCL,,, +16,not exposed,general purpose,,,,,**CAN_A.TX**,I2C.SDA,,, \ No newline at end of file diff --git a/docs/reStructuredText/hoverboard.rst b/docs/reStructuredText/hoverboard.rst index c26060f6..f9fa43ec 100644 --- a/docs/reStructuredText/hoverboard.rst +++ b/docs/reStructuredText/hoverboard.rst @@ -248,7 +248,7 @@ Hopefully you got your motor to spin! Feel free to repeat all of the above for t PWM Input ------------------------------------------------------------------------------- -If you want to drive your hoverboard wheels around with an RC remote control you can use the :ref:`RC PWM input `. There is more information in that link. +If you want to drive your hoverboard wheels around with an RC remote control you can use the :ref:`RC PWM input `. There is more information in that link. Lets use GPIO 3/4 for the velocity inputs so that we don't have to disable UART. Then let's map the full stick range of these inputs to some suitable velocity setpoint range. We also have to reboot to activate the PWM input. diff --git a/docs/reStructuredText/index.rst b/docs/reStructuredText/index.rst index 85ceee11..76476abd 100644 --- a/docs/reStructuredText/index.rst +++ b/docs/reStructuredText/index.rst @@ -3,11 +3,25 @@ You can adapt this file completely to your liking, but it should at least contain the root `toctree` directive. -.. include:: getting-started.rst +================================================================================ +ODrive Documentation +================================================================================ +Welcome to the ODrive V3.6 documentation homepage! + +This project strives to bring high performance motor control to makers, all of the source code is +open source and available on github `here. `__ + +.. note:: + + This documentation is specifically for V3.6, for ODrive Pro Beta click `here. `__ + +`ODrive Robotics homepage. `__ + +Table of Contents +-------------------------------------------------------------------------------- .. toctree:: - :hidden: :maxdepth: 1 :caption: General @@ -22,7 +36,6 @@ ground-loops .. toctree:: - :hidden: :maxdepth: 1 :caption: Tutorials @@ -32,7 +45,6 @@ .. toctree:: - :hidden: :maxdepth: 1 :caption: Interfaces and Protocols @@ -55,7 +67,6 @@ .. toctree:: - :hidden: :maxdepth: 1 :caption: For ODrive Developers diff --git a/docs/reStructuredText/pinout.rst b/docs/reStructuredText/pinout.rst index 5ab79ec5..b586ad11 100644 --- a/docs/reStructuredText/pinout.rst +++ b/docs/reStructuredText/pinout.rst @@ -16,7 +16,7 @@ ODrive v3.x Pinout .. ODrive v3.x .. -------------------------------------------------------------------------------- -.. csv-table:: Table Title +.. csv-table:: Pinout Table :file: figures/pinout.csv :header-rows: 1 @@ -30,7 +30,7 @@ Notes -------------------------------------------------------------------------------- * Changes to the pin configuration only take effect after :code:`odrv0.save_configuration()` and :code:`odrv0.reboot()` -* Bold font marks the default configuration. +* **Bold font** marks the default configuration. * If a GPIO is set to an unsupported mode it will be left uninitialized. * When setting a GPIO to a special purpose mode (e.g. :code:`GPIO_MODE_UART_A`) you must also enable the corresponding feature (e.g. :code:`.config.enable_uart_a`). * Digital mode is a general purpose mode that can be used for these functions: step, dir, enable, encoder index, hall effect encoder, SPI encoder nCS.