再谈AD采样和备用寄存器的
AD采样问题:
AD采样的线性问题如前讨论可以通过软件校正,硬件抬高电位避开非线性区,而差分采样并不能避开小电压信号时的非线性区,也就是说差分采样无法避开非线性区。本设计的电流采样和电压采样是共地的如图:
用二极管将要采样的信号抬高大0.5V左右,避开非线性区;而电流采样将无法使用单端放大,可使用差分放大,但是实验证明PGA的放大效果不是太理想,电流信号直接采样电压最大不超过500mV,而且干扰很大,暂时放弃恒流功能,仅实现恒压功能。如果内部AD的能对于mV级电压的测量,那么实现恒流功能就没问题了。
与硬件加速相关的备用寄存器问题:
1. 采用自动切换,ADC中断关联备用寄存器,意味着切换到中断中时不能进行其他操作,只能是:
// asm("mov _voltageControlReference, w0"); // SMPS_Controller2P2ZUpdate_HW_Accel();
但是采样电压要随时能控制启动和停止,通过关闭中断能实现,但是存在一定的隐患可能导致占空比没及时关闭,不打算使用这种办法,一旦加入其他C语言代码,就有可能破坏备用寄存器中的数据(汇编直接操作用户寄存器是没问题的)但是汇编优势笔者的软肋。所以放弃了硬件加速功能。实验中也出现程序异常的情况,最后定位便是硬件切换导致的。
2. 手动转换,asm("CTXTSWP #0x2");之后不要有其他操作。但是也出现了问题,查看汇编指令能解决,但是还出现诡异的问题,算了放弃。
3. 干脆不适用硬件加速,总之这样问题解决了,没有出现异常,不用硬件加速总能使用dsp指令加速。这里需要注意,官方库中没有编译,需要自己重新编译下生成库文件,还又出现了一个非常诡异的问题:数字长度按照手册的2233,总是报错section冲突,但是改成3333奇迹般的通过了,这是什么*¥%!太诡异了!出这个问题也是醉了,解决他也是死了不少脑细胞。
报错
// so stranger !!!!!!!!!!!!!!!!! int16_t voltageController2P2ZControlHistory[2] __attribute__ ((section (".ybss"))); //2 int16_t voltageController2P2ZACoefficient[2] __attribute__ ((section (".xbss"))); // 2 int16_t voltageController2P2ZErrorHistory[3] __attribute__ ((section (".ybss"))); // 3 int16_t voltageController2P2ZBCoefficient[3] __attribute__ ((section (".xbss"))); // 3
编译通过
// so stranger !!!!!!!!!!!!!!!!! int16_t voltageController2P2ZControlHistory[3] __attribute__ ((section (".ybss"))); //2 int16_t voltageController2P2ZACoefficient[3] __attribute__ ((section (".xbss"))); // 2 int16_t voltageController2P2ZErrorHistory[3] __attribute__ ((section (".ybss"))); // 3 int16_t voltageController2P2ZBCoefficient[3] __attribute__ ((section (".xbss"))); // 3
4. 继续谈个诡异的问题
在AD中断中删除关于ADCBUFx的操作,上电就死机,至今也没发现原因,不过这个确实也符合操作,在AD转换中不操作AD结果,你还想干啥。
220V上电测试
解决完这些问题,第一次220V上电,由于内部掉了块焊锡,导致放电少了一路MOS管,但是并没有发现,只发现最大电压输出才14V(@28A),这是就该怀疑只有一路工作了,结果加10V(@100A)时IRF840爆掉了,100A 10V 1KW,单路IRF840肯定不行,开始怀疑是次级整流管,抗冲击能力不够,但是拆下来,测量发现没坏,又重新按上(9个啊)。将IRF840(TO220)换成IRFP460(TO247),过流和散热能力提升了一个等级,上电测试,次级整流管硬是抗住了100A的电流,95mΩ左右的电炉丝加到了10V的电压,输出功率1KW左右,有噪音,可能是变压器和电感没有浸漆的缘故,液晶已经被干扰到无法显示,但是程序并没有跑飞,电压受控,命令也能响应。
简单总结下:
1、汇编最好还是要学的,在C等高级语言流行的天下,处理器DSP级别汇编还是必不可少
2、MPLAB的使用,对于这款新上手的IDE一定要有耐心,确实没有Keil,IAR成熟,但是也有好多非常赞的功能比如MCC DCDT等
dsPIC33EP64GS502这款处理器的性能和抗干扰能力还是非常出色,编程方面由于是刚刚接触,磨合的还不是太好,刚刚开始有的是功夫,有的是惊喜。
实验板子整体展示