【单片机】【710】逆变

20170322

 1  Key_Receive = KeyScan();
 2         switch(Key_Receive){        //按下RE0(93脚)来控制开关
 3             case 1:                               
 4 //                PR2 = 2000;     //载波20KHz 
 5                 OC1CONbits.OCM = 0b110; 
 6                 OC2CONbits.OCM = 0b110; 
 7                 DISPLAY_stri(0,0,"   ");
 8                 DISPLAY_stri(0,0,"ON");     
 9                 Key = ~Key;
10                 if(Key == 0){
11                     OC1CONbits.OCM = 0b000;
12                     OC2CONbits.OCM = 0b000;
13                     OC1RS = 0;
14                     OC2RS = 0;
15                     DISPLAY_stri(0,0,"   ");
16                     DISPLAY_stri(0,0,"OFF");    
17                 }                
18                 break;

上面是正常工作的按键写法,作用是开关逆变的输出。先回忆一下逆变的配置方法

  1. 各种初始化,CPU,Timer2,ADC,PWM,LCD(如果有显示的话),PR2的值(我的习惯写法,方便改动,在初始化里面可写可不写)
  2. 按键控制,先声明一个unsigned char类型的变量(Key_rec)来接收按键扫描的值,然后用switch在while(1)里面依据接收到的值执行不同的指令。
  3. 配置PWM输出,逆变需要两路来输出,本人用的710(虽手册上写有半桥输出功能,但却无法配置),配置时,OCx里的x就是对应的输出引脚,此时须注意凡是初始化里的语句里带有OCx的指令,x必须要全部和你配置的那个脚对应的x一样。控制占空比的寄存器是OCxRS(PWM输出模式下)。
  4. 添加表格。按你想要输出的频率生成相应的表格,计算方法是先计算多久进一次中断t,然后用你想要频率F的周期T去除以t,得到的就是逆变的点数。最大值不得超过定时器的比较值(PR2的值),所以要注意如果乘倍率的时候最大值不要超过PR2。不然输出是空心的。
  5. 中断输出,最后的一步了。把表格的值一个一个输出去就行了,一般只用到表格的一半的值,为什么,你看代码就知道了
 1 void __attribute__((__interrupt__, __shadow__)) _T2Interrupt(void) {
 2               
 3     if (p < 200) {                   //50Hz
 4         OC1RS = rate*Count4[p];
 5         OC2RS = 0;
 6     }
 7     if (p >=200) {
 8         OC1RS = 0;
 9         OC2RS = rate*Count4[p-200];
10     }
11     p++;
12     if (p >= 400) 
13         p = 0;
14     IFS0bits.T2IF=0;
15 }

 最后要提醒,一定要注意看门狗有没有关,这里用不到看门狗。所以去CPU的配置文件里关了吧,不然你的单片机过一会就会自动复位了(如果你有开关按键,那么就是给你到关闭状态了)。这是个教训。

原文地址:https://www.cnblogs.com/iteou/p/6607773.html