您好, 登录| 注册|
论坛导航
您好, 登录| 注册|
子站:
商城:
论坛首页    单片机MCU/嵌入式
  •  发帖
  • 收藏

【单片机开源学习】PIC单片机的逆变程序
阅读: 3745 |  回复: 17 楼层直达

2014/11/14 15:48:34
1
liuzhengkun98
电源币:0 | 积分:6 主题帖:2 | 回复帖:3
LV2
班长

QQ截图20160321155901  【有奖DIY】工程师本色上演 设计征集活动

QQ截图20160321155901 日本之旅(一)回忆感超强的历史,充满期待的未来 你要不要也来看看




大家好,我的PIC18F23K20逆变程序如下,可是效果不好,请诸位探讨探讨。


#include <pic18f23k20.h>
#include<pic.h>
//系统配置
__CONFIG(HS&PWRTEN&BOREN&PROTECT&WDTDIS);
//关闭看门狗,选择高速晶振,上电延时复位,掉电复位使能,代码保护
//变量定义
//------------------------------------------------------------
//指示灯宏定义
#define L1_RED_ON   RB1=1;RB2=0;//L1红灯亮
#define L1_RED_OFF  RB1=0;RB2=0;

#define L2_RED_ON   RB4=1;RB3=0;//L2红灯亮
#define L2_RED_OFF  RB4=0;RB3=0;

#define L3_RED_ON   RB7=1;RB5=0;//L3红灯亮
#define L3_RED_OFF  RB7=0;RB5=0;

#define L1_GREE_ON  RB2=1;RB1=0;//L1绿灯亮
#define L1_GREE_OFF RB2=0;RB1=0;

#define L2_GREE_ON  RB3=1;RB4=0;//L2绿灯亮
#define L2_GREE_OFF RB3=0;RB4=0;

#define L3_GREE_ON  RB5=1;RB7=0;//L3绿灯亮
#define L3_GREE_OFF RB5=0;RB7=0;
//-----------------------------------------------------------
//模拟输入通道宏定义
#define AN0 CHS0=CHS1=HS2=0;
#define AN1 CHS=0;CHS1=CHS2=1;
#define AN2 CHS0=CHS2=1;CHS1=1;
//-----------------------------------------------------------
bit ccp1,k,ccp2;
unsigned char mode;
//-----------------------------------------------------------
//软件延时子程序*/
void       DELAY()
{
unsigned int i;
   for(i=10000;i>0;i--);
}

//-----------------------------------------------------------
void adc_init()
{
//ad时钟选择
ADCS1=1;//FOSC/32
ADCS0=0;
//
PCFG0=0;
PCFG1=0;
PCFG2=0;//RA0=AN0,RA1=AN1,RA2=AN2,VREF=VDD-VSS
ADON=1;//打开ad模块
ADIF=0;//清除ad中断标志
ADIE=1;//打开ad模块中断
PEIE=1;//打开外围模块中断
GIE=1;//打开总中断
}
//-----------------------------------------------------------
void port_init()//端口初始化
{
//端口b设置
TRISB0=0;TRISB1=0;TRISB2=0;TRISB3=0;TRISB4=0;TRISB5=0;
TRISB6=1;//输入
TRISB7=0;//RB端口方向设置
PORTB=0;//输出0
RBPU=0;//使能内部弱上拉
INTE=0;//禁止RB0中断
RBIF=0;
RBIE=1;//允许RB端口电平变化中断

//端口c设置
TRISC=0X00;//PORTC are outputs
PORTC=0;//输出为0
RC1=RC2=1;
//timer0 init
T0CS=0;//选择内部指令时钟
T0IF=0;
//T0IE=1;//在第一次ccp1比较后打开中断使能
//timer1
TMR1CS=0;//定时器模式
}
//----------------------------------------------------------
void init_start()//开始
{
L1_RED_ON;
L2_RED_ON;
L3_RED_ON;
DELAY();DELAY();DELAY();
L1_GREE_ON;
L2_GREE_ON;
L3_GREE_ON;
DELAY();DELAY();DELAY();
L1_GREE_OFF;
L2_GREE_OFF;
L3_GREE_OFF;
L1_GREE_ON;
}
//----------------
void CCP2_pwm()//ccp2 pwm初始化,CCP1比较初始化
{
TMR2ON=0;

//复位ccp
//CCP2M3=0;CCP2M2=0;CCP2M1=0;CCP2M0=0;
CCP1M3=0;CCP1M2=0;CCP1M1=0;CCP1M0=0;
GIE=0;PEIE=0;//禁止总中断和外围中断
CCP1IF=0;
CCP1M3=1;CCP1M2=0;CCP1M1=0;CCP1M0=1;//比较模式
CCPR1H=0x17;
CCPR1L=0xe8;//每隔6个指令周期发生比较操作
TMR1L=TMR1H=0;
//--------
CCP2IF=0;
CCPR2L=0X6;//设置80%的脉宽输出
CCP2X=CCP2Y=0;
CCP2M3=CCP2M2=1;//PWM模式
PR2=0Xff;//设置PWM的工作周期,20mhz,PWM周期=(PR2+1)*4*TOSC*TIMER2预分频比=19.531khz
T2CKPS1=T2CKPS0=0;//timer2预分频器1
TOUTPS3=TOUTPS2=TOUTPS1=TOUTPS0=0;//后分频器1
//-------------------
CCP1IE=1;
TMR2ON=1;
GIE=1;

}

//---------------
void CCP1_pwm()//ccp1 pwm初始化,CCP2比较初始化
{
TMR2ON=0;

//复位ccp
CCP2M3=0;CCP2M2=0;CCP2M1=0;CCP2M0=0;
//CCP1M3=0;CCP1M2=0;CCP1M1=0;CCP1M0=0;
GIE=0;PEIE=0;//禁止总中断和外围中断
//-------------------设置CCP2比较模式
CCP2IF=0;
CCP2M3=1;CCP2M2=0;CCP2M1=0;CCP2M0=1;//比较模式
CCPR2H=0x17;
CCPR2L=0xe8;//每隔6个指令周期发生比较操作
TMR1L=TMR1H=0;
//-------
CCP1IF=0;
CCPR1L=0X6;//设置80%的脉宽输出
CCP1X=CCP1Y=0;
CCP1M3=CCP1M2=1;//PWM模式
PR2=0Xff;//设置PWM的工作周期,20mhz,PWM周期=(PR2+1)*4*TOSC*TIMER2预分频比=19.531khz
T2CKPS1=T2CKPS0=0;//timer2预分频器1
TOUTPS3=TOUTPS2=TOUTPS1=TOUTPS0=0;//后分频器1
//-------------------
CCP2IE=1;
TMR2ON=1;
GIE=1;
}

//------------------
void interrupt key_ccp_timer()
{
if(RBIF){RBIF=0;if(!RB6)k=1;}
if(CCP1IF){RC2=1;TMR1L=TMR1H=0;CCP1IF=0;mode++;if(mode==32){mode=0;ccp1=1;L1_GREE_ON;}}
if(CCP2IF){RC1=1;TMR1L=TMR1H=0;CCP2IF=0;mode++;if(mode==32){mode=0;ccp2=1;L1_RED_ON;}}
if(T0IF){T0IF=0;}
if(ADIF){ADIF=0;}

}
//------------------------------------------------------------------------
void main(void)
{
port_init();
init_start();
adc_init();
while(1)
 {
if(k){DELAY();if(k&RB6)k=0;ccp2=1;}
if(ccp2){ccp1=0;CCP2_pwm();}
if(ccp1){ccp2=0;CCP1_pwm();}
 }
}



标签 PIC
电流模式PWM控制器8-SOIC 0至70 IO-Link数字输入集线器参考设计 面向 1000mA 空间受限类应用的同步降压稳压器
0至70的双路低功耗轨到轨输入/输出运算放大器 USB Type-C及PD多端口适配器参考设计 具有40μA静态电流的 2A SIMPLE SWITCHER®、降压稳压器
四线双线至1线数据选择器/多路复用器 支持音频和充电功能的USB Type-C和供电迷你坞 高速、4A、600V 高侧/低侧栅极驱动器
2014/11/17 11:53:09
2
电源网-娜娜姐
上一次首页头条
电源币:457 | 积分:217 主题帖:293 | 回复帖:1807
LV10
司令
帮楼主顶一个,希望你的问题早点解决~
2014/11/20 11:35:26
7
liuzhengkun98
电源币:0 | 积分:6 主题帖:2 | 回复帖:3
LV2
班长

你看看有吗问题吗?为什么我的仿真不了呢

2014/11/17 13:58:00
3
苑留记
电源币:295 | 积分:0 主题帖:132 | 回复帖:182
LV8
师长

乐老师,程序怎么那么长啊。

2014/11/18 11:09:28
5
电源网-娜娜姐
上一次首页头条
电源币:457 | 积分:217 主题帖:293 | 回复帖:1807
LV10
司令
乐老师在哪
2014/11/17 19:58:55
4
西华杨林
电源币:1508 | 积分:0 主题帖:4 | 回复帖:53
LV4
连长

我们正在用这款单片机做EPS——6KW的,目前3KW没问题,6KW器件没回来

2014/11/20 11:34:38
6
liuzhengkun98
电源币:0 | 积分:6 主题帖:2 | 回复帖:3
LV2
班长
你们直接做硬件?不软件仿真吗?
2014/11/20 12:03:37
8
西华杨林
电源币:1508 | 积分:0 主题帖:4 | 回复帖:53
LV4
连长
没有,我们的3KW已经在做样机了
2014/12/31 15:20:33
10
又一个暑假
电源币:191 | 积分:0 主题帖:4 | 回复帖:83
LV5
营长
仿真文件能不能贴上来
2014/11/20 19:43:54
9
xiaqing
电源币:15 | 积分:13 主题帖:1 | 回复帖:145
LV7
旅长
好帖!顶一个!
2015/02/04 16:30:01
11
gohoshi
电源币:24 | 积分:0 主题帖:0 | 回复帖:4
LV1
士兵
现在是什么具体问题?
2016/02/12 00:19:04
12
wangminwr
电源币:2 | 积分:0 主题帖:0 | 回复帖:12
LV2
班长
有图吗?
2016/02/12 19:19:34
13
zcq760622
电源币:0 | 积分:0 主题帖:2 | 回复帖:28
LV3
排长
看一看
2016/02/14 17:26:43
14
tt98650207
电源币:0 | 积分:0 主题帖:0 | 回复帖:5
LV1
士兵
来看看你的正弦波是怎样产生的!
2016/02/23 17:40:33
15
loudianxin
电源币:0 | 积分:0 主题帖:21 | 回复帖:295
LV7
旅长
问一下  输出稳压怎么实现
2017/02/14 21:32:23
16
zhaowenming
电源币:23 | 积分:0 主题帖:42 | 回复帖:250
LV6
团长
2017/02/15 13:22:56
17
苑留记
电源币:295 | 积分:0 主题帖:132 | 回复帖:182
LV8
师长
路过
2017/03/23 13:13:31
18
ruohan
电源币:3 | 积分:9 主题帖:44 | 回复帖:1013
LV9
军长

单片机的型号是什么,

关注我们
新浪微博
官方Q群
客服热线
服务时间:周一至周五9:00-18:00
微信关注
免费技术研讨会
获取一手干货分享