Browse Source

让步进电机转起来

master
zhaohe 2 years ago
parent
commit
0be8607a7b
  1. 8
      .vscode/settings.json
  2. 15
      app/Core/Src/gpio.c
  3. 18
      app/MDK-ARM/app.uvguix.h_zha
  4. 64
      app/app.ioc
  5. 2
      dep/libtrinamic
  6. 28
      src/port.cpp
  7. 9
      src/port.hpp
  8. 38
      src/umain.cpp

8
.vscode/settings.json

@ -14,6 +14,12 @@
"spi.h": "c",
"atomic": "cpp",
"memory": "cpp",
"random": "cpp"
"random": "cpp",
"system_error": "cpp",
"array": "cpp",
"functional": "cpp",
"tuple": "cpp",
"type_traits": "cpp",
"utility": "cpp"
}
}

15
app/Core/Src/gpio.c

@ -65,6 +65,9 @@ void MX_GPIO_Init(void)
HAL_GPIO_WritePin(GPIOE, GPIO_PIN_8, GPIO_PIN_RESET);
/*Configure GPIO pin Output Level */
HAL_GPIO_WritePin(GPIOE, GPIO_PIN_11|GPIO_PIN_12, GPIO_PIN_SET);
/*Configure GPIO pin Output Level */
HAL_GPIO_WritePin(GPIOD, GPIO_PIN_4|GPIO_PIN_5|GPIO_PIN_6, GPIO_PIN_RESET);
/*Configure GPIO pin Output Level */
@ -72,12 +75,12 @@ void MX_GPIO_Init(void)
/*Configure GPIO pins : PE2 PE3 PE4 PE5
PE6 PE7 PE9 PE10
PE11 PE12 PE13 PE14
PE15 PE0 PE1 */
PE13 PE14 PE15 PE0
PE1 */
GPIO_InitStruct.Pin = GPIO_PIN_2|GPIO_PIN_3|GPIO_PIN_4|GPIO_PIN_5
|GPIO_PIN_6|GPIO_PIN_7|GPIO_PIN_9|GPIO_PIN_10
|GPIO_PIN_11|GPIO_PIN_12|GPIO_PIN_13|GPIO_PIN_14
|GPIO_PIN_15|GPIO_PIN_0|GPIO_PIN_1;
|GPIO_PIN_13|GPIO_PIN_14|GPIO_PIN_15|GPIO_PIN_0
|GPIO_PIN_1;
GPIO_InitStruct.Mode = GPIO_MODE_ANALOG;
GPIO_InitStruct.Pull = GPIO_NOPULL;
HAL_GPIO_Init(GPIOE, &GPIO_InitStruct);
@ -132,8 +135,8 @@ void MX_GPIO_Init(void)
GPIO_InitStruct.Pull = GPIO_NOPULL;
HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);
/*Configure GPIO pin : PE8 */
GPIO_InitStruct.Pin = GPIO_PIN_8;
/*Configure GPIO pins : PE8 PE11 PE12 */
GPIO_InitStruct.Pin = GPIO_PIN_8|GPIO_PIN_11|GPIO_PIN_12;
GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
GPIO_InitStruct.Pull = GPIO_NOPULL;
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;

18
app/MDK-ARM/app.uvguix.h_zha

@ -15,17 +15,17 @@
<View>
<WinId>38003</WinId>
<ViewName>Registers</ViewName>
<TableColWidths>177 177</TableColWidths>
<TableColWidths>162 163</TableColWidths>
</View>
<View>
<WinId>346</WinId>
<ViewName>Code Coverage</ViewName>
<TableColWidths>860 442</TableColWidths>
<TableColWidths>860 160</TableColWidths>
</View>
<View>
<WinId>204</WinId>
<ViewName>Performance Analyzer</ViewName>
<TableColWidths>896 153 153 100</TableColWidths>
<TableColWidths>1020</TableColWidths>
</View>
</SECTreeCtrl>
@ -70,7 +70,7 @@
<WinId>466</WinId>
<ViewName>Source Browser</ViewName>
<UserString>500</UserString>
<TableColWidths>166</TableColWidths>
<TableColWidths>300</TableColWidths>
</View>
</TreeListPane>
@ -1822,7 +1822,7 @@
<Name>Build</Name>
<Buttons>
<Len>966</Len>
<Data>00200000010000001000FFFF01001100434D4643546F6F6C426172427574746F6ECF7F0000000000001C0000000000000000000000000000000001000000010000000180D07F0000000000001D000000000000000000000000000000000100000001000000018030800000000000001E000000000000000000000000000000000100000001000000FFFF01001500434D4643546F6F6C4261724D656E75427574746F6EC7040000000000006A0000000C4261746368204275696C2664000000000000000000000000010000000100000000000000000000000100000004000580C7040000000000006A0000000C4261746368204275696C266400000000000000000000000001000000010000000000000000000000010000000000058046070000000000006B0000000D42617463682052656275696C640000000000000000000000000100000001000000000000000000000001000000000005804707000000000000FFFFFFFF0B426174636820436C65616E0000000000000000010000000000000001000000000000000000000001000000000005809E8A0000000000001F0000000F4261746326682053657475702E2E2E000000000000000000000000010000000100000000000000000000000100000000000180D17F0000000004002000000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001804C8A0000000000002100000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000FFFF01001900434D4643546F6F6C426172436F6D626F426F78427574746F6EBA0000000000000000000000000000000000000000000000000100000001000000960000000300205000000000036170709600000000000000010003617070000000000180EB880000000000002200000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180C07F000000000000230000000000000000000000000000000001000000010000000180B08A000000000400240000000000000000000000000000000001000000010000000180A8010000000000004E00000000000000000000000000000000010000000100000001807202000000000000530000000000000000000000000000000001000000010000000180BE010000000000005000000000000000000000000000000000010000000100000000000000054275696C64DC010000</Data>
<Data>00200000010000001000FFFF01001100434D4643546F6F6C426172427574746F6ECF7F0000000000001C0000000000000000000000000000000001000000010000000180D07F0000000000001D000000000000000000000000000000000100000001000000018030800000000000001E000000000000000000000000000000000100000001000000FFFF01001500434D4643546F6F6C4261724D656E75427574746F6EC7040000000000006A0000000C4261746368204275696C2664000000000000000000000000010000000100000000000000000000000100000004000580C7040000000000006A0000000C4261746368204275696C266400000000000000000000000001000000010000000000000000000000010000000000058046070000000000006B0000000D42617463682052656275696C640000000000000000000000000100000001000000000000000000000001000000000005804707000000000000FFFFFFFF0B426174636820436C65616E0100000000000000000000000100000001000000000000000000000001000000000005809E8A0000000000001F0000000F4261746326682053657475702E2E2E000000000000000000000000010000000100000000000000000000000100000000000180D17F0000000004002000000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001804C8A0000000000002100000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000FFFF01001900434D4643546F6F6C426172436F6D626F426F78427574746F6EBA0000000000000000000000000000000000000000000000000100000001000000960000000300205000000000036170709600000000000000010003617070000000000180EB880000000000002200000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180C07F000000000000230000000000000000000000000000000001000000010000000180B08A000000000400240000000000000000000000000000000001000000010000000180A8010000000000004E00000000000000000000000000000000010000000100000001807202000000000000530000000000000000000000000000000001000000010000000180BE010000000000005000000000000000000000000000000000010000000100000000000000054275696C64DC010000</Data>
</Buttons>
<OriginalItems>
<Len>583</Len>
@ -3660,9 +3660,9 @@
</Doc>
<Doc>
<Name>..\..\dep\libtrinamic\src\ic\tmc4361A.cpp</Name>
<ColumnNumber>25</ColumnNumber>
<TopLine>74</TopLine>
<CurrentLine>90</CurrentLine>
<ColumnNumber>0</ColumnNumber>
<TopLine>76</TopLine>
<CurrentLine>102</CurrentLine>
<Folding>1</Folding>
<ContractedFolders></ContractedFolders>
<PaneID>0</PaneID>
@ -3679,7 +3679,7 @@
<Doc>
<Name>..\..\src\port.cpp</Name>
<ColumnNumber>4</ColumnNumber>
<TopLine>12</TopLine>
<TopLine>21</TopLine>
<CurrentLine>47</CurrentLine>
<Folding>1</Folding>
<ContractedFolders></ContractedFolders>

64
app/app.ioc

@ -27,40 +27,42 @@ Mcu.Pin1=PH1-OSC_OUT
Mcu.Pin10=PC4
Mcu.Pin11=PC5
Mcu.Pin12=PE8
Mcu.Pin13=PD14
Mcu.Pin14=PC6
Mcu.Pin15=PC7
Mcu.Pin16=PC8
Mcu.Pin17=PC9
Mcu.Pin18=PA9
Mcu.Pin19=PA10
Mcu.Pin13=PE11
Mcu.Pin14=PE12
Mcu.Pin15=PD14
Mcu.Pin16=PC6
Mcu.Pin17=PC7
Mcu.Pin18=PC8
Mcu.Pin19=PC9
Mcu.Pin2=PC0
Mcu.Pin20=PA13
Mcu.Pin21=PA14
Mcu.Pin22=PD0
Mcu.Pin23=PD1
Mcu.Pin24=PD2
Mcu.Pin25=PD3
Mcu.Pin26=PD4
Mcu.Pin27=PD5
Mcu.Pin28=PD6
Mcu.Pin29=PD7
Mcu.Pin20=PA9
Mcu.Pin21=PA10
Mcu.Pin22=PA13
Mcu.Pin23=PA14
Mcu.Pin24=PD0
Mcu.Pin25=PD1
Mcu.Pin26=PD2
Mcu.Pin27=PD3
Mcu.Pin28=PD4
Mcu.Pin29=PD5
Mcu.Pin3=PC1
Mcu.Pin30=PB3
Mcu.Pin31=PB6
Mcu.Pin32=PB7
Mcu.Pin33=VP_CRC_VS_CRC
Mcu.Pin34=VP_RNG_VS_RNG
Mcu.Pin35=VP_SYS_VS_Systick
Mcu.Pin36=VP_TIM6_VS_ClockSourceINT
Mcu.Pin37=VP_TIM7_VS_ClockSourceINT
Mcu.Pin30=PD6
Mcu.Pin31=PD7
Mcu.Pin32=PB3
Mcu.Pin33=PB6
Mcu.Pin34=PB7
Mcu.Pin35=VP_CRC_VS_CRC
Mcu.Pin36=VP_RNG_VS_RNG
Mcu.Pin37=VP_SYS_VS_Systick
Mcu.Pin38=VP_TIM6_VS_ClockSourceINT
Mcu.Pin39=VP_TIM7_VS_ClockSourceINT
Mcu.Pin4=PC2
Mcu.Pin5=PC3
Mcu.Pin6=PA4
Mcu.Pin7=PA5
Mcu.Pin8=PA6
Mcu.Pin9=PA7
Mcu.PinsNb=38
Mcu.PinsNb=40
Mcu.ThirdPartyNb=0
Mcu.UserConstants=
Mcu.UserName=STM32F407VETx
@ -150,6 +152,14 @@ PD6.Locked=true
PD6.Signal=GPIO_Output
PD7.Locked=true
PD7.Signal=GPIO_Input
PE11.GPIOParameters=PinState
PE11.Locked=true
PE11.PinState=GPIO_PIN_SET
PE11.Signal=GPIO_Output
PE12.GPIOParameters=PinState
PE12.Locked=true
PE12.PinState=GPIO_PIN_SET
PE12.Signal=GPIO_Output
PE8.Locked=true
PE8.Signal=GPIO_Output
PH0-OSC_IN.Mode=HSE-External-Oscillator
@ -184,7 +194,7 @@ ProjectManager.StackSize=0x400
ProjectManager.TargetToolchain=MDK-ARM V5.32
ProjectManager.ToolChainLocation=
ProjectManager.UnderRoot=false
ProjectManager.functionlistsort=1-SystemClock_Config-RCC-false-HAL-false,2-MX_GPIO_Init-GPIO-false-HAL-true,3-MX_USART1_UART_Init-USART1-false-HAL-true,4-MX_TIM2_Init-TIM2-false-HAL-true,5-MX_TIM3_Init-TIM3-false-HAL-true,6-MX_TIM4_Init-TIM4-false-HAL-true,7-MX_CRC_Init-CRC-false-HAL-true,8-MX_RNG_Init-RNG-false-HAL-true,9-MX_TIM7_Init-TIM7-false-HAL-true,10-MX_SPI1_Init-SPI1-false-HAL-true,11-MX_TIM6_Init-TIM6-false-HAL-true,12-MX_TIM8_Init-TIM8-false-HAL-true
ProjectManager.functionlistsort=1-SystemClock_Config-RCC-false-HAL-false,2-MX_GPIO_Init-GPIO-false-HAL-true,3-MX_USART1_UART_Init-USART1-false-HAL-true,4-MX_TIM2_Init-TIM2-false-HAL-true,5-MX_TIM3_Init-TIM3-false-HAL-true,6-MX_TIM4_Init-TIM4-false-HAL-true,7-MX_CRC_Init-CRC-false-HAL-true,8-MX_RNG_Init-RNG-false-HAL-true,9-MX_TIM7_Init-TIM7-false-HAL-true,10-MX_SPI1_Init-SPI1-false-HAL-true,11-MX_TIM6_Init-TIM6-false-HAL-true
RCC.48MHZClocksFreq_Value=48000000
RCC.AHBFreq_Value=144000000
RCC.APB1CLKDivider=RCC_HCLK_DIV4

2
dep/libtrinamic

@ -1 +1 @@
Subproject commit 4801a88cab96f1a7970398b3028afac98e39777f
Subproject commit 1665bb75e0e73e8fe76e2f5bbc81a5e10c2942d1

28
src/port.cpp

@ -34,14 +34,28 @@ void port_delay_us(uint32_t us) { sys_delay_us(&DELAY_US_TIMER, us); }
void port_spi_cs_select(bool select) { //
HAL_GPIO_WritePin(GPIOA, GPIO_PIN_4, select ? GPIO_PIN_SET : GPIO_PIN_RESET);
}
void port_tmc4361_spi_write_and_read(uint8_t* data, size_t length) {
void port_tmc_motor_spi_write_and_read(int channel, uint8_t* data, size_t length) {
//
port_spi_cs_select(false);
port_delay_us(1);
HAL_SPI_TransmitReceive(&hspi1, data, data, length, 1000);
port_spi_cs_select(true);
if (channel == MOTOR_1_TMC4361A_CHANNEL) {
port_spi_cs_select(false);
port_delay_us(1);
HAL_SPI_TransmitReceive(&hspi1, data, data, length, 1000);
port_spi_cs_select(true);
}
}
void port_tmc_nFREEZE_pin_set_state(uint8_t channel, bool state) {
if (channel == MOTOR_1_TMC4361A_CHANNEL) {
HAL_GPIO_WritePin(GPIOE, GPIO_PIN_12, state ? GPIO_PIN_SET : GPIO_PIN_RESET);
}
}
void port_tmc_ENN_pin_set_state(uint8_t channel, bool state) {
if (channel == MOTOR_1_TMC2160_CHANNEL) {
HAL_GPIO_WritePin(GPIOE, GPIO_PIN_11, state ? GPIO_PIN_SET : GPIO_PIN_RESET);
}
}
void port_tmc_nRESET_pin_set_state(uint8_t channel, bool state) {}
void port_tmc_extern_clk_enable() {
#if 1
/**
@ -53,11 +67,13 @@ void port_tmc_extern_clk_enable() {
HAL_TIM_PWM_Start(&htim8, TIM_CHANNEL_4);
#endif
}
#if 0
int32_t port_tmc4361_get_version(uint8_t channel) {
int value;
uint8_t data[5];
data[0] = 0x7f;
port_tmc4361_spi_write_and_read(&data[0], 5);
port_tmc_motor_spi_write_and_read(&data[0], 5);
value = ((uint32_t)data[1] << 24) | ((uint32_t)data[2] << 16) | (data[3] << 8) | data[4];
return value;
}
#endif

9
src/port.hpp

@ -7,6 +7,11 @@ void port_delay_us(uint32_t us);
/*******************************************************************************
* tmc芯片驱动相关 *
*******************************************************************************/
void port_tmc4361_spi_write_and_read(uint8_t *data, size_t length);
void port_tmc_motor_spi_write_and_read(int channel, uint8_t* data, size_t length);
void port_tmc_extern_clk_enable();
int32_t port_tmc4361_get_version(uint8_t channel) ;
void port_tmc_nFREEZE_pin_set_state(uint8_t channel, bool state);
void port_tmc_ENN_pin_set_state(uint8_t channel, bool state);
void port_tmc_nRESET_pin_set_state(uint8_t channel, bool state);
int32_t port_tmc4361_get_version(uint8_t channel);

38
src/umain.cpp

@ -9,19 +9,20 @@
#define TAG "main"
//
// port_tmc_DRV_ENN_pin_set_state
class TMC4361AImpl : public TMC4361A {
virtual void setResetPinState(bool state){};
virtual void setFREEZEPinState(bool state){};
virtual void setENNPinState(bool state){};
protected:
virtual void setResetPinState(bool state) { port_tmc_nRESET_pin_set_state(m_channel, state); };
virtual void setFREEZEPinState(bool state) { port_tmc_nFREEZE_pin_set_state(m_channel, state); };
virtual void setENNPinState(bool state) { port_tmc_ENN_pin_set_state(m_channel, state); };
virtual bool getTargetReachedPinState() { return false; };
virtual void sleepus(int32_t us) { port_delay_us(us); };
virtual void readWriteArray(uint8_t *data, size_t length) { //
if (m_channel == MOTOR_1_TMC4361A_CHANNEL) {
port_tmc4361_spi_write_and_read(data, length);
}
port_tmc_motor_spi_write_and_read(m_channel, data, length);
};
};
class TMC2160Impl : public TMC2160 {
TMC4361A *m_tmc4361;
@ -31,8 +32,9 @@ class TMC2160Impl : public TMC2160 {
TMC2160::initialize(channel);
}
virtual void setENNPinState(bool state){};
virtual void sleepus(int32_t us){};
protected:
virtual void setENNPinState(bool state) { port_tmc_ENN_pin_set_state(m_channel, state); };
virtual void sleepus(int32_t us) { port_delay_us(us); };
virtual void readWriteArray(uint8_t *data, size_t length) { m_tmc4361->readWriteCover(data, length); };
};
@ -48,13 +50,23 @@ int umain(int argc, char const *argv[]) {
tmc4361motor1.initialize(MOTOR_1_TMC4361A_CHANNEL, TMC4361A::IC_TMC2160);
tmc2160motor1.initialize(MOTOR_1_TMC2160_CHANNEL, &tmc4361motor1);
HAL_Delay(100);
tmc4361motor1.enableIC(true);
tmc2160motor1.enableIC(true);
/**
* @brief Version寄存器来判断芯片是否正常
*/
int32_t ic4361Version = tmc4361motor1.readICVersion();
int32_t ic2160Version = tmc2160motor1.readICVersion();
// 期望 4361Version:2 ic2160Version:30
ZLOGI(TAG, "4361Version:%x ic2160Version:%x", ic4361Version, ic2160Version);
tmc4361motor1.setMaximumAcceleration(300000);
tmc4361motor1.setMaximumDeceleration(300000);
tmc4361motor1.rotate(100000);
while (true) {
int32_t ic4361Version = tmc4361motor1.readICVersion();
int32_t ic2160Version = tmc2160motor1.readICVersion();
ZLOGI(TAG, "4361Version:%x ic2160Version:%x", ic4361Version, ic2160Version);
port_do_debug_light_state();
}
return 0;

Loading…
Cancel
Save