[活动] 【APM32M3514电机通用评估板评测】+pid调试1

[复制链接]
 楼主| 发表于 2025-1-20 10:40 | 显示全部楼层 |阅读模式
本帖最后由 穿西装的强子 于 2025-1-20 10:48 编辑

由于该评估板暂无多余的io接出到串口,只能手动改板子飞线了;
先确定IO,反向电动势接口在代码上暂时没使用,接的引脚是PC4和PC5,把这个地方改到串口1使用;
3.png 4.png


根据数据手册,PC4和PC5使用AF2作为串口;
代码如下,把printf打印也加上:
  1. void IOinit_uart1(void)
  2. {
  3.     GPIO_Config_T   GPIO_InitStructure;
  4.     /*  PF0 -> uart1_tx    */
  5.     GPIO_InitStructure.pin      =   GPIO_PIN_4;
  6.     GPIO_InitStructure.speed    =   GPIO_SPEED_50MHz;
  7.     GPIO_InitStructure.mode     =   GPIO_MODE_AF;
  8.     GPIO_InitStructure.pupd     =   GPIO_PUPD_NO;
  9.     GPIO_InitStructure.outtype  = GPIO_OUT_TYPE_PP;
  10.     GPIO_Config(GPIOC, &GPIO_InitStructure);
  11.     GPIO_InitStructure.pin      =   GPIO_PIN_5;
  12.     GPIO_Config(GPIOC, &GPIO_InitStructure);
  13.     GPIO_ConfigPinAF(GPIOC, GPIO_PIN_SOURCE_4, GPIO_AF_PIN2);
  14.     GPIO_ConfigPinAF(GPIOC, GPIO_PIN_SOURCE_5, GPIO_AF_PIN2);
  15. }
  16. int fputc(int ch, FILE* f)
  17. {
  18.     /* send a byte of data to the serial port */
  19.     USART_TxData(USART1, (uint8_t)ch);

  20.     /* wait for the data to be send  */
  21.     while (USART_ReadStatusFlag(USART1, USART_FLAG_TXBE) == RESET);

  22.     return (ch);
  23. }

  24. void Pilot_uart_init(void)
  25. {
  26.     USART_Config_T USART_InitStructure;
  27.     DMA_Config_T   DMA_InitStructure;
  28.    
  29. //    RCM_ConfigUSARTCLK(RCM_USART1CLK_SYSCLK);
  30.     RCM_EnableAPB2PeriphClock(RCM_APB2_PERIPH_USART1);

  31.     USART_InitStructure.baudRate   = 115200;//1945946;
  32.     USART_InitStructure.mode       = USART_MODE_TX_RX;
  33.     USART_InitStructure.hardwareFlowCtrl = USART_FLOW_CTRL_NONE;
  34.     USART_InitStructure.parity     = USART_PARITY_NONE;
  35.     USART_InitStructure.stopBits   = USART_STOP_BIT_1;
  36.     USART_InitStructure.wordLength = USART_WORD_LEN_8B;
  37.     USART_Config(USART1,&USART_InitStructure);
  38.     USART_DisableOverSampling8(USART1);
  39.     USART_DisableOneBitMethod(USART1);
  40.     USART1->CTRL3 &= (uint32_t)~0x400;
  41.     /** Enable USART */
  42.     USART_Enable(USART1);
  43.    
  44.     USART_EnableDMA(USART1, USART_DMA_REQUEST_TX);
  45.     USART_EnableDMA(USART1, USART_DMA_REQUEST_RX);
  46.     /* USART1_RX Init */
  47.     DMA_InitStructure.direction = DMA_DIR_PERIPHERAL;
  48.     DMA_InitStructure.peripheralInc = DMA_PERIPHERAL_INC_DISABLE;
  49.     DMA_InitStructure.memoryInc = DMA_MEMORY_INC_ENABLE;
  50.     DMA_InitStructure.peripheralDataSize = DMA_PERIPHERAL_DATASIZE_BYTE ;
  51.     DMA_InitStructure.memoryDataSize     = DMA_MEMORY_DATASIZE_BYTE ;   
  52.     DMA_InitStructure.circular           = DMA_CIRCULAR_DISABLE  ;
  53.     DMA_InitStructure.priority = DMA_PRIORITY_LEVEL_LOW;
  54.     DMA_Config(DMA_CHANNEL_5, &DMA_InitStructure);  
  55.     /* USART1_TX Init */
  56.     DMA_InitStructure.direction = DMA_DIR_MEMORY;
  57.     DMA_InitStructure.peripheralInc = DMA_PERIPHERAL_INC_DISABLE;
  58.     DMA_InitStructure.memoryInc = DMA_MEMORY_INC_ENABLE;
  59.     DMA_InitStructure.peripheralDataSize = DMA_PERIPHERAL_DATASIZE_BYTE ;
  60.     DMA_InitStructure.memoryDataSize     = DMA_MEMORY_DATASIZE_BYTE ;   
  61.     DMA_InitStructure.circular           = DMA_CIRCULAR_DISABLE  ;
  62.     DMA_InitStructure.priority = DMA_PRIORITY_LEVEL_LOW;
  63.     DMA_Config(DMA_CHANNEL_4, &DMA_InitStructure);  
  64.    
  65. }
硬件改线如下,黄色是PC4-TX,橙色是PC5-RX:

2.jpg
使用py+qt的串口调试工具进行波形显示,链接如下:使用python+qt做一个串口波形调试工具 - 电子设计论坛 - 21ic电子技术开**坛
  1. https://bbs.21ic.com/icview-3427892-1-1.html


v1.png
显示了4个波形,q轴,d轴当前电流,q轴d轴设置电流,该波形是启动时电流变化,可以看到,q轴电流在启动时有个大电流,按资料显示,启动时因为无编码器,不知道内部电角度,只有通过q轴电流强拉启动,有转速或者q轴到0°时初始化电角度,再通过滑模观测器进行电角度的观测换算。

发表于 2025-1-20 16:07 | 显示全部楼层
这几个电流是如何获取的
 楼主| 发表于 2025-1-20 16:41 | 显示全部楼层
EchoInSilence 发表于 2025-1-20 16:07
这几个电流是如何获取的
Motor_type.Foc.stc_Idq.s16q15_D
Motor_type.Foc.stc_Idq.s16q15_Q
Motor_type.Foc.stc_IdqCmd.s16q15_D
Motor_type.Foc.stc_IdqCmd.s16q15_Q

这几个参数,文档里面有的
您需要登录后才可以回帖 登录 | 注册

本版积分规则

60

主题

256

帖子

3

粉丝
快速回复 返回顶部 返回列表