//文件 p33pwm6.h

#ifndef _P33PWM6_H_
#define _P33PWM6_H_
//#include "p33pwm6.h" #define FSYNCOEN (1<<8)//主时基同步使能位
#define FSYNCEN (1<<7)//外步时基同步使能位 //输入时钟预分频选择
#define PWMCLK_DIV1 (0<<0)
#define PWMCLK_DIV2 (1<<0)
#define PWMCLK_DIV4 (2<<0)
#define PWMCLK_DIV8 (3<<0)
#define PWMCLK_DIV16 (4<<0)
#define PWMCLK_DIV32 (5<<0)
#define PWMCLK_DIV64 (6<<0) #define V_PTPER 720//1000 //主控时基周期值 #define POH1_ValidH IOCON1 &= ~(1<<13) //上管引脚高电平有效
#define POH1_ValidL IOCON1 |= (1<<13) //上管引脚低电平有效
#define POH2_ValidH IOCON2 &= ~(1<<13) //上管引脚高电平有效
#define POH2_ValidL IOCON2 |= (1<<13) //上管引脚低电平有效
#define POH3_ValidH IOCON3 &= ~(1<<13) //上管引脚高电平有效
#define POH3_ValidL IOCON3 |= (1<<13) //上管引脚低电平有效 #define PWMAH_ENB IOCON1bits.OVRENH = 0
#define PWMBH_ENB IOCON2bits.OVRENH = 0
#define PWMCH_ENB IOCON3bits.OVRENH = 0
#define PWMAH_DIS IOCON1bits.OVRENH = 1
#define PWMBH_DIS IOCON2bits.OVRENH = 1
#define PWMCH_DIS IOCON3bits.OVRENH = 1 //===============================================
extern void Init_Pwm6(uint16 InClkdiv,uint16 CycPwm) ;
extern void ToPwmValue(uint16 Tcon) ; #endif //文件 p33pwm6.c #include "global.h"
#include "p33pwm6.h" //***************************************
// 函数名称:Init_Pwm6
// 函数功能:初始化PWM
// 入口参数:PWM时钟分频 PWM周期值
// 出口参数:无
// 返回值:无
// pwm 的时钟源为Fosc (即系统时钟)
//***************************************
void Init_Pwm6(uint16 InClkdiv,uint16 CycPwm)
{
PTCON = 0x0000 ; //PWM模块禁止 每次比较产生触发事件
PTCON2 = InClkdiv ; //输入时钟预分频 PTPER = CycPwm ; //主控周期值 PHASE1 = CycPwm ; //主移相寄存器
PHASE2 = CycPwm ;
PHASE3 = CycPwm ; SEVTCMP = 0X0000 ; //特殊事件比较计数值位
CHOP = 0X0000 ; //斩波时钟发生器-- 禁止 MDC = 0x0000 ; //主控占空比值
PDC1 = 0x0000 ; //pwm占空比寄存器
PDC2 = 0x0000 ;
PDC3 = 0x0000 ;
/*
//PTPER 提供周期 mdc为PWM提供占空比
PWMCON1 = 0X0180 ; //禁止死区控制
PWMCON2 = 0X0180 ; //禁止死区控制
PWMCON3 = 0X0180 ; //禁止死区控制
*/ //PHASEx 提供周期 PDCx为PWM提供占空比
PWMCON1 = 0X0280 ; //禁止死区控制
PWMCON2 = 0X0280 ; //禁止死区控制
PWMCON3 = 0X0280 ; //禁止死区控制 /*
//PHASEx 提供周期 PDCx为PWM提供占空比
PWMCON1 = 0X0380 ; //禁止死区控制
PWMCON2 = 0X0380 ; //禁止死区控制
PWMCON3 = 0X0380 ; //禁止死区控制
*/ DTR1 = 0X0000 ; //死区寄存器
DTR2 = 0X0000 ;
DTR3 = 0X0000 ; ALTDTR1 = 0X0000 ; //备用死区寄存器
ALTDTR2 = 0X0000 ;
ALTDTR3 = 0X0000 ; TRGCON1 = 0X0000 ; //PWM触发控制寄存器
TRGCON2 = 0X0000 ;
TRGCON3 = 0X0000 ;
/*
PWM模块控制H管 GPIO控制L管
PWM IO引脚模式处于独立模式
*/
IOCON1 = 0X8c00 ; //PWM IO 控制寄存器
IOCON2 = 0X8c00 ;
IOCON3 = 0X8c00 ; POH1_ValidH ; //上管引脚 高电平有效
POH2_ValidH ;
POH3_ValidH ; TRIG1 = 0X0000 ;//PWM主触发比较值寄存器
TRIG2 = 0X0000 ;
TRIG3 = 0X0000 ; //PWM故障限流控制寄存器 禁止限流 禁止故障输入
FCLCON1 = 0X0003 ;
FCLCON2 = 0X0003 ;
FCLCON3 = 0X0003 ; LEBCON1 = 0X0000 ;//前沿消隐控制寄存器
LEBCON2 = 0X0000 ;
LEBCON3 = 0X0000 ; LEBDLY1 = 0X0000 ; //前沿消隐延时寄存器 限流和故障输入消隐
LEBDLY2 = 0X0000 ;
LEBDLY3 = 0X0000 ; AUXCON1 = 0X0000 ; //PWM附属控制寄存器
AUXCON2 = 0X0000 ;
AUXCON3 = 0X0000 ; PTCON |= (FSYNCOEN|FSYNCEN) ;//主时基同步使能 //当PWM不使能时 PWMH PWML管脚输出的电平状态
//第1位为上管 第0位为下管
IOCON1bits.OVRDAT = 0X00 ; //PWM禁止时 PWMH PWML输出0
IOCON1bits.OVRDAT = 0X00 ; //
IOCON1bits.OVRDAT = 0X00 ; // PWMCON1 |= 0X0001 ; //立即更新有效位
PWMCON2 |= 0X0001 ; //立即更新有效位
PWMCON3 |= 0X0001 ; //立即更新有效位 PTCON = 0x8000 ;//PWM模块使能
}
//***************************************
// 函数名称:Init_Pwm6
// 函数功能:初始化时钟
// 入口参数:时钟来源选择 处理器与CPU时钟分频比 pll倍频比
// 出口参数:无
// 返回值:无
//***************************************
void ToPwmValue(uint16 Tcon)
{
PDC1 = Tcon ; //pwm占空比寄存器
PDC2 = Tcon ;
PDC3 = Tcon ; // MDC = Tcon; //主控占空比值
} //应用实例 void main(void)
{
uint16 g_wTmp1 ; //初始化PWM
//独立时期 独立占空比 PWM固定频率16K
Init_Pwm6(PWMCLK_DIV8,V_PTPER) ;//Fosc/8 16k pwm 最大占空比值为720 while(1)
{
ToPwmValue(200) ; //设置PWM占空比 PWMAH_ENB ; //输出PWM到H1管 PWMAH_DIS ;//禁止输出PWM到H1管
} }

dsPIC33EP 高速PWM模块初始化设置及应用的更多相关文章

  1. STM8S TIM1 PWM初始化设置

    #define TIM1_DIV1 (uint16)(1-1) #define TIM1_DIV2 (uint16)(2-1) #define TIM1_DIV4 (uint16)(4-1) #def ...

  2. nginx源码分析之模块初始化

    在nginx启动过程中,模块的初始化是整个启动过程中的重要部分,而且了解了模块初始化的过程对应后面具体分析各个模块会有事半功倍的效果.在我看来,分析源码来了解模块的初始化是最直接不过的了,所以下面主要 ...

  3. 嵌入式davinci电路元素基础和PWM模块

    1,DAC_OUT和DAC_OUTB是AD9912输出的差分信号. 2,电容器储存电荷的能力,常用的单位是F.uF.nF.pFUF大了好还是UF小了好,要根据电路自身需要而设计, 要看电路滤波是在高频 ...

  4. JobTracker等相关功能模块初始化

    [Hadoop代码笔记]Hadoop作业提交之JobTracker等相关功能模块初始化 一.概要描述 本文重点描述在JobTracker一端接收作业.调度作业等几个模块的初始化工作.想过模块的介绍会在 ...

  5. Framebuffer 驱动学习总结(二)---- Framebuffer模块初始化

    ---恢复内容开始--- Framebuffer模块初始化过程:--driver\video\fbmem.c 1.  初始化Framebuffer: FrameBuffer驱动是以模块的形式注册到系统 ...

  6. Windows加载器与模块初始化

    本文是Matt Pietrek在1999年9月的MSJ杂志上发表的关于Windows加载器与模块初始化方面的文章.作者深入分析了LdrpRunInitialize璕outines例程的作用,用C语言写 ...

  7. UI设计之PS界面初始化设置

    一.PS界面初始化 1.新建设置  web设计的基础标准:宽度为1920px,高度自定义,分辨率72px,背景模式RGB 8位.(提示:可以“存为预设”以便以后直接调用) 注意:背景内容为透明!!! ...

  8. IIS 7.5 使用URL Rewrite模块简单设置网页跳转

    原文 IIS 7.5 使用URL Rewrite模块简单设置网页跳转 我们都知道Apache可以在配置文件里方便的设置针对网页或网站的rewrite,但是最近接手了一组IIS服务器,发现这货简单的没有 ...

  9. nginx-push-stream模块源码学习(二)——模块初始化

    本文重点介绍push stream模块的构成,至于nginx如何启动.维护该模块不会详细阐述,以后有时间会做详细阐述. 一.模块定义 1.1.  模块配置 通用nginx模块的配置struct有三种, ...

随机推荐

  1. 判断CString字符串中各位是数字,大小写字母,符号,汉字.xml

    pre{ line-height:1; color:#1e1e1e; background-color:#e9e9ff; font-size:16px;}.sysFunc{color:#627cf6; ...

  2. mybatis源码学习: 编译的方法

    mybatis3用了一段时间,抽出时间来研究一下.具体用法参考官方文档就行,源码在这里.mybatis相对而言,规模较小,可以从中学习如何编写高质量的java项目. mybatis3使用maven管理 ...

  3. Winsock IO模型之select模型

    之所以称其为select模型是因为它主要是使用select函数来管理I/O的.这个模型的设计源于UNIX系统,目的是允许那些想要避免在套接字调用上阻塞的应用程序有能力管理多个套接字. int sele ...

  4. JAVA分析html算法(JAVA网页蜘蛛算法)

    近来有些朋友在做蜘蛛算法,或者在网页上面做深度的数据挖掘.但是遇到复杂而繁琐的html页面大家都望而却步.因为很难获取到相应的数据. 最古老的办法的是尝试用正则表达式,估计那么繁琐的东西得不偿失,浪费 ...

  5. Arduino uno R3 ISP刷Rootloader for arduino pro mini

    找了好久才发现的,好东西.介绍怎么使用uno对mini 刷Rootloader **SOLUTION** Reinstall the Arduino Pro Mini Bootloader using ...

  6. Swift 脚本(运行时带参数)

    #!/usr/bin/env xcrun swift import Foundation let args = Process.arguments print("Arg:\(args)&qu ...

  7. 基于Linux2.6内核的加密容器法保护文件方法

            本文出自 "李晨光原创技术博客" 博客,谢绝转载!

  8. incompatible

  9. 2016 ACM/ICPC 沈阳站 小结

    铜铜铜…… 人呐真奇怪 铁牌水平总想着运气好拿个铜 铜牌水平总想着运气好拿个银 估计银牌的聚聚们一定也不满意 想拿个金吧 这次比赛挺不爽的 AB两道SB题,十分钟基本全场都过了 不知道出这种题有什么意 ...

  10. 第二百零五天 how can I 坚持

    身体无论什么时候都是最重要的.肝血管瘤,头一次听说,应该没什么大碍.父母年龄大了,我们也该尽快把自己的事情处理好,让他们放心了. 规律作息,合理饮食,多注意锻炼. 该怎么办.不能这拖下去. 好好规划下 ...