6702调试笔记
# 电机部分
at32 pwm功能介绍
https://blog.csdn.net/weixin_64557865/article/details/141779922
官方简略pdf
https://arterytek.com/download/DS/DS_AT32F405_402_V2.03_CH.pdf
官方完整pdf
https://arterytek.com/download/RM/RM_AT32F402_405_CH_V2.02.pdf
pwm有几个重要参数, 周期, 比较值, 计数值, 通道有各种模式, A, B, 相等, 反转..., 强制高低
PWM AB: 以比较值为临界点, 当计数值大于或小于该点, 则输出高或低电平, 即我们平时用的pwm模式, 具体看链接
脉冲模式: 当计数值等于比较值时, 输出高或低电平, 一般用得很少
切换模式: 当计数值等于比较值时, 切换当前电平, 一般用得很少
强制模式: 当普通输出IO用, 一般用得很少
具体看链接
目前GPIO不够用, 只能用互补脚, 经过构思, CH2+PWMA = CH2C+PWMB
立即输出模式: 能够让第一个信号快速输出, 我们的应用应该用不到
## 20260127调机
pwm互补输出: 2通道互补输出, 会输出和2通道相反的信号, 按照这种特性, 我认为应该把用pwmB模式, 才能负负得正, 把互补通道当作正常通道来用
但是实测下来, 2互补通道输出+pwmB模式 和 3普通通道输出+pwmA模式, 输出的波形却是一样的, 这就有点奇怪了, 跟我的设想有点不一样, 现在先用着, 以后慢慢研究
# 编码器
完整pdf: 297页
编码器模式 A:SMSEL=3’b001,计数器在 C1IFP1 边沿计数(上升沿和下降沿), 计数方向由 C1IFP1 边
沿方向和 C2IFP2 电平高低共同决定。
编码器模式 B:SMSEL=3’b010,计数器在 C2IFP2 边沿计数(上升沿和下降沿), 计数方向由 C2IFP2 边
沿方向和 C1IFP1 电平高低共同决定。
编码器模式 C:SMSEL=3’b011,计数器在 C1IFP1 和 C2IFP2 边沿计数(上升沿和下降沿), 计数方向
由 C1IFP1 边沿方向和 C2IFP2 电平高低、C2IFP2 边沿方向和 C1IFP1 电平高低共同决定共同决定。
ab可以简单理解为duke fpga写的步进电机模式, c就是普通正交信号模式
# 供电
上电发现电源不正常, 原因是因为硬件工程师画板子的时候, 符号选择错误, 我们最常见的mos管是GSD排序的, 他选了一个DGS排序的符号, 导致layout错误
临时把mos管逆时针旋转一个脚位就解决了
上电时bl直接掉电, 把pwr_off使能也没用, 我把绿灯改为红灯也不生效, 很明显是改动没有对板子生效
排查结果是因为复制项目时, 里面的烧录脚本, 还是指定了当前目录下旧的hex文件, 即:
```
pyocd flash build/旧.hex $AT32ARGS
```
并且我make新项目的时候, 虽然改动的时候会重新编译, 导致了一种我在修改的假象, 但是没有make clean, 导致旧.hex还在目录里, 每次都在烧这个hex
后续改了脚本就可以了, 还是要养成make clean的习惯
# 485不通讯
调试中发现485不通讯, 排查了一下, 发现了一个bug, 头文件里的中断端口指定错误
```
#define CD_IRQ EXINT2_IRQn
```
正确的是 EXINT9_5_IRQn, 但是这个明显不是关键原因, 因为我之前别的机器也是用这个错误代码, 这个只是会导致抢占错误等小bug
再排查的时候, 发现这个机器做了低功耗处理, 需要手动开启485的3v3供电, 但是量了一下, 我无论是无配置的高阻态g脚, 还是配置了推挽的低电平, d脚都有2v的残电, 可能去掉上拉电阻就好了
但是这一块是后续的低功耗优化的部分, 仅作记录, 以后再慢慢排查调试
评论
发表评论