PageRenderTime 467ms CodeModel.GetById 19ms RepoModel.GetById 0ms app.codeStats 0ms

/software/patches-essential/0005-CM730-firmware-changes-for-NimbRo-OP.patch

https://github.com/NimbRo/nimbro-op
Patch | 283 lines | 239 code | 44 blank | 0 comment | 0 complexity | 3bf843626c57a67a3261ea33b7412720 MD5 | raw file
Possible License(s): MPL-2.0-no-copyleft-exception, BSD-3-Clause
  1. From 53a5016aa2b4afd0a846c4ead873da31042b70cb Mon Sep 17 00:00:00 2001
  2. From: sebastian <sebastian>
  3. Date: Fri, 12 Oct 2012 12:08:28 +0200
  4. Subject: [PATCH 05/25] CM730 firmware changes for NimbRo-OP
  5. Changelist:
  6. - firmware: changed toolchain prefix
  7. - firmware: adapted voltage thresholds for 4 cells
  8. - firmware: tolerate voltages below 13.0V (power supply)
  9. - firmware: fixed timer interrupt bug
  10. - firmware: enable higher resolution on gyro
  11. - firmware: switch dxl torque off on startup/reset
  12. ---
  13. firmware/CM730_APP/inc/CM_DXL_COM.h | 2 ++
  14. firmware/CM730_APP/src/CM_DXL_COM.c | 26 ++++++++++++++++++++++++++
  15. firmware/CM730_APP/src/isr.c | 14 +++++++-------
  16. firmware/CM730_APP/src/main.c | 13 ++++++++++---
  17. firmware/CM730_APP/src/stm32f10x_it.c | 9 +++++----
  18. firmware/CM730_HW/inc/usart.h | 2 +-
  19. firmware/CM730_HW/src/gyro_acc.c | 2 +-
  20. firmware/CM730_HW/src/usart.c | 24 ++++++++++++++++--------
  21. firmware/Makefile | 2 +-
  22. 9 files changed, 69 insertions(+), 25 deletions(-)
  23. diff --git a/firmware/CM730_APP/inc/CM_DXL_COM.h b/firmware/CM730_APP/inc/CM_DXL_COM.h
  24. index 519e7a8..7b0d91a 100644
  25. --- a/firmware/CM730_APP/inc/CM_DXL_COM.h
  26. +++ b/firmware/CM730_APP/inc/CM_DXL_COM.h
  27. @@ -283,6 +283,8 @@ extern volatile byte gbLEDPwm;
  28. void Process(void);
  29. +void TorqueOff();
  30. +
  31. #endif /* _DYNAMIXEL_CM_DXL_COM_HEADER */
  32. diff --git a/firmware/CM730_APP/src/CM_DXL_COM.c b/firmware/CM730_APP/src/CM_DXL_COM.c
  33. index 2c34671..0a9ae4f 100644
  34. --- a/firmware/CM730_APP/src/CM_DXL_COM.c
  35. +++ b/firmware/CM730_APP/src/CM_DXL_COM.c
  36. @@ -344,6 +344,28 @@ void ProcessAfterWriting(void);
  37. u8 gbDxlPwr;
  38. +void TorqueOff(void)
  39. +{
  40. + gbTxD0BufferReadPointer = gbTxD0BufferWritePointer = 0;
  41. + gbpTxD0Buffer[gbTxD0BufferWritePointer++] = 0xff;
  42. + gbpTxD0Buffer[gbTxD0BufferWritePointer++] = 0xff;
  43. + gbpTxD0Buffer[gbTxD0BufferWritePointer++] = 0xFE; // Broadcast
  44. + gbpTxD0Buffer[gbTxD0BufferWritePointer++] = 4;
  45. + gbpTxD0Buffer[gbTxD0BufferWritePointer++] = INST_WRITE;
  46. + gbpTxD0Buffer[gbTxD0BufferWritePointer++] = 0x18; // Torque enable
  47. + gbpTxD0Buffer[gbTxD0BufferWritePointer++] = 0x00; // off
  48. + gbpTxD0Buffer[gbTxD0BufferWritePointer++] = ~((u8)(0xFE + 4 + INST_WRITE + 0x18 + 0x00));
  49. +
  50. + if ( GPIO_ReadOutputDataBit(PORT_ENABLE_TXD, PIN_ENABLE_TXD) == Bit_RESET) {
  51. + //TxDString(USART_ZIGBEE,"\r\n TEST0");
  52. + //if (TXD0_FINISH) {
  53. + GPIO_ResetBits(PORT_ENABLE_RXD, PIN_ENABLE_RXD); // RX Disable
  54. + GPIO_SetBits(PORT_ENABLE_TXD, PIN_ENABLE_TXD); // TX Enable
  55. +
  56. + USART_SendData(USART1, gbpTxD0Buffer[gbTxD0BufferReadPointer++]);
  57. + USART_ITConfig(USART1, USART_IT_TC, ENABLE);
  58. + }
  59. +}
  60. void Process(void)
  61. {
  62. @@ -934,6 +956,10 @@ void ProcessAfterWriting(void)
  63. case P_DYNAMIXEL_POWER:
  64. dxl_set_power(GB_DYNAMIXEL_POWER);
  65. + if(GB_DYNAMIXEL_POWER == ON)
  66. + {
  67. + enableDXLForwarding();
  68. + }
  69. gbDxlPwr = GB_DYNAMIXEL_POWER;
  70. break;
  71. case P_LED_PANNEL:
  72. diff --git a/firmware/CM730_APP/src/isr.c b/firmware/CM730_APP/src/isr.c
  73. index 39c4bcd..19b5595 100644
  74. --- a/firmware/CM730_APP/src/isr.c
  75. +++ b/firmware/CM730_APP/src/isr.c
  76. @@ -25,12 +25,12 @@
  77. #define BLINK_COUNT 10 //(0.5s * 10 = 5s)
  78. #define BLINK_TIME 1042 //(480us * 1042 = 0.5s)
  79. -#define VOLTAGE_LEVEL_5 121 //12.05V
  80. -#define VOLTAGE_LEVEL_4 116 //11.62V
  81. -#define VOLTAGE_LEVEL_3 114 //11.40V
  82. -#define VOLTAGE_LEVEL_2 112 //11.25V
  83. -#define VOLTAGE_LEVEL_1 110 //11.05V
  84. -#define VOLTAGE_LEVEL_0 106 //10.64V
  85. +#define VOLTAGE_LEVEL_5 161 //12.05V
  86. +#define VOLTAGE_LEVEL_4 155 //11.62V
  87. +#define VOLTAGE_LEVEL_3 152 //11.40V
  88. +#define VOLTAGE_LEVEL_2 149 //11.25V
  89. +#define VOLTAGE_LEVEL_1 147 //11.05V
  90. +#define VOLTAGE_LEVEL_0 141 //10.64V
  91. #define LOW_BATTERY_COUNT 20 //
  92. #define SOUND_LOW_VOLTAGE_LENGTH 255
  93. @@ -57,7 +57,7 @@ void ISR_BATTERY_CHECK(void)
  94. static byte bLowBatteryCount;
  95. GB_ADC0_VOLTAGE = getVoltage();
  96. - if ( GB_ADC0_VOLTAGE <= VOLTAGE_LEVEL_1 ) {
  97. + if ( GB_ADC0_VOLTAGE <= VOLTAGE_LEVEL_1 && GB_ADC0_VOLTAGE > 130) {
  98. if (bLowBatteryCount < LOW_BATTERY_COUNT) bLowBatteryCount++;
  99. }
  100. else {
  101. diff --git a/firmware/CM730_APP/src/main.c b/firmware/CM730_APP/src/main.c
  102. index f560a99..6d506fd 100644
  103. --- a/firmware/CM730_APP/src/main.c
  104. +++ b/firmware/CM730_APP/src/main.c
  105. @@ -48,8 +48,7 @@ int main(void)
  106. System_Configuration();
  107. - dxl_set_power(OFF);
  108. - //dxl_set_power(ON);
  109. + dxl_set_power(ON);
  110. Zigbee_SetState(ON);
  111. //gbDxlPwr = ON;
  112. @@ -136,8 +135,14 @@ int main(void)
  113. gbLEDBlinkCounter = 8;
  114. + for (bCount = 0; bCount < 3; bCount++) {
  115. + LED_SetState(LED_MANAGE|LED_EDIT|LED_PLAY, ON);
  116. + mDelay(50);
  117. + LED_SetState(LED_MANAGE|LED_EDIT|LED_PLAY, OFF);
  118. + mDelay(50);
  119. + }
  120. -
  121. + TorqueOff();
  122. for (bCount = 0; bCount < 3; bCount++) {
  123. LED_SetState(LED_MANAGE|LED_EDIT|LED_PLAY, ON);
  124. @@ -145,6 +150,8 @@ int main(void)
  125. LED_SetState(LED_MANAGE|LED_EDIT|LED_PLAY, OFF);
  126. mDelay(50);
  127. }
  128. +
  129. + dxl_set_power(OFF);
  130. /*
  131. dxl_set_power(1);
  132. gbDxlPwr = 1;
  133. diff --git a/firmware/CM730_APP/src/stm32f10x_it.c b/firmware/CM730_APP/src/stm32f10x_it.c
  134. index 8ac8324..0364377 100644
  135. --- a/firmware/CM730_APP/src/stm32f10x_it.c
  136. +++ b/firmware/CM730_APP/src/stm32f10x_it.c
  137. @@ -38,7 +38,6 @@ extern vu16 CCR3_Val; // from system_init.c
  138. extern vu16 CCR4_Val; // from system_init.c
  139. -vu32 capture = 0;
  140. vu8 Counter = 0;
  141. vu16 gwCounter1 = 0;
  142. @@ -478,6 +477,8 @@ void TIM1_CC_IRQHandler(void)
  143. {
  144. }
  145. +extern u8 ReadButton(void);
  146. +
  147. /*******************************************************************************
  148. * Function Name : TIM2_IRQHandler
  149. * Description : This function handles TIM2 global interrupt request.
  150. @@ -487,14 +488,14 @@ void TIM1_CC_IRQHandler(void)
  151. *******************************************************************************/
  152. void TIM2_IRQHandler(void)
  153. {
  154. - static b1Sec=0;
  155. + static byte b1Sec=0;
  156. if (TIM_GetITStatus(TIM2, TIM_IT_CC4) != RESET) // 120us, 8000Hz
  157. {
  158. TIM_ClearITPendingBit(TIM2, TIM_IT_CC4);
  159. ISR_ADC();
  160. - capture = TIM_GetCapture4(TIM2);
  161. - TIM_SetCompare4(TIM2, capture + CCR4_Val);
  162. + TIM_SetCounter(TIM2, 0);
  163. + TIM_SetCompare4(TIM2, CCR4_Val);
  164. if( !( gwCounter1 & 7 ) ) // 840us
  165. diff --git a/firmware/CM730_HW/inc/usart.h b/firmware/CM730_HW/inc/usart.h
  166. index 3f5c008..805d2cb 100644
  167. --- a/firmware/CM730_HW/inc/usart.h
  168. +++ b/firmware/CM730_HW/inc/usart.h
  169. @@ -32,7 +32,7 @@ void __ISR_USART_DXL(void);
  170. void __ISR_USART_ZIGBEE(void);
  171. void __ISR_USART_PC(void);
  172. -
  173. +void enableDXLForwarding();
  174. #endif /* __USART_H */
  175. diff --git a/firmware/CM730_HW/src/gyro_acc.c b/firmware/CM730_HW/src/gyro_acc.c
  176. index 8e6bbd3..f125989 100644
  177. --- a/firmware/CM730_HW/src/gyro_acc.c
  178. +++ b/firmware/CM730_HW/src/gyro_acc.c
  179. @@ -263,7 +263,7 @@ void Gyro_Configuration(void)
  180. while (SPI_I2S_GetFlagStatus(SPI2, SPI_I2S_FLAG_RXNE) == RESET);
  181. Push_SPI_Data( SPI_I2S_ReceiveData(SPI2) );
  182. - SPI_I2S_SendData(SPI2,0x20); // WRITE 0XFF TO CTRL_REG1(0X20). OUTPUT DATA RATE 800HZ, POWER : NORMAL, XYZ ENABLE.
  183. + SPI_I2S_SendData(SPI2,0x00); // WRITE 0XFF TO CTRL_REG1(0X20). OUTPUT DATA RATE 800HZ, POWER : NORMAL, XYZ ENABLE.
  184. while (SPI_I2S_GetFlagStatus(SPI2, SPI_I2S_FLAG_TXE) == RESET);
  185. while (SPI_I2S_GetFlagStatus(SPI2, SPI_I2S_FLAG_RXNE) == RESET);
  186. Push_SPI_Data( SPI_I2S_ReceiveData(SPI2) );
  187. diff --git a/firmware/CM730_HW/src/usart.c b/firmware/CM730_HW/src/usart.c
  188. index 8f8b057..42d478f 100644
  189. --- a/firmware/CM730_HW/src/usart.c
  190. +++ b/firmware/CM730_HW/src/usart.c
  191. @@ -20,6 +20,8 @@
  192. /* Private macro -------------------------------------------------------------*/
  193. /* Private variables ---------------------------------------------------------*/
  194. +volatile u8 gbDXLForwarding = 0;
  195. +
  196. // usart buffer
  197. /*
  198. volatile u16 gwpUSART_DXL_Buffer[USART_BUFFER_SIZE+1];
  199. @@ -133,16 +135,18 @@ void __ISR_USART_PC(void)
  200. //if (TXD0_READY) {
  201. - //if( GB_DYNAMIXEL_POWER)
  202. - if ( GPIO_ReadOutputDataBit(PORT_ENABLE_TXD, PIN_ENABLE_TXD) == Bit_RESET) {
  203. - //if (TXD0_FINISH) {
  204. - GPIO_ResetBits(PORT_ENABLE_RXD, PIN_ENABLE_RXD); // RX Disable
  205. - GPIO_SetBits(PORT_ENABLE_TXD, PIN_ENABLE_TXD); // TX Enable
  206. + if(gbDXLForwarding)
  207. + {
  208. + if ( GPIO_ReadOutputDataBit(PORT_ENABLE_TXD, PIN_ENABLE_TXD) == Bit_RESET) {
  209. + //if (TXD0_FINISH) {
  210. + GPIO_ResetBits(PORT_ENABLE_RXD, PIN_ENABLE_RXD); // RX Disable
  211. + GPIO_SetBits(PORT_ENABLE_TXD, PIN_ENABLE_TXD); // TX Enable
  212. - USART_SendData(USART1, gbpTxD0Buffer[gbTxD0BufferReadPointer++]);
  213. - //gbTxD0BufferReadPointer &= 0x3FF;
  214. - USART_ITConfig(USART1, USART_IT_TC, ENABLE);
  215. + USART_SendData(USART1, gbpTxD0Buffer[gbTxD0BufferReadPointer++]);
  216. + //gbTxD0BufferReadPointer &= 0x3FF;
  217. + USART_ITConfig(USART1, USART_IT_TC, ENABLE);
  218. + }
  219. }
  220. }
  221. @@ -238,5 +242,9 @@ void __ISR_USART_DXL(void)
  222. }
  223. +void enableDXLForwarding(void)
  224. +{
  225. + gbDXLForwarding = 1;
  226. +}
  227. /******************* (C) COPYRIGHT 2010 ROBOTIS *****END OF FILE****/
  228. diff --git a/firmware/Makefile b/firmware/Makefile
  229. index 68f9d93..f05f2e7 100644
  230. --- a/firmware/Makefile
  231. +++ b/firmware/Makefile
  232. @@ -6,7 +6,7 @@ INCLUDE_DIRS = -I. -Istm32f10x_lib/inc -ICM730_HW/inc -ICM730_APP/inc
  233. #INCLUDE_DIRS = -I.
  234. LIBRARY_DIRS = -Lstm32f10x_lib
  235. -TCHAIN_PREFIX=arm-eabi-
  236. +TCHAIN_PREFIX=arm-none-eabi-
  237. CC = $(TCHAIN_PREFIX)gcc
  238. --
  239. 1.7.10.4