pic单片机可以输出高电平5V的PWM吗

pic单片机可以输出高电平5V的PWM吗,第1张

单片机输出PWM波的高电平电压取决于单片机的工作电源电压。

PIC32系列单片机的工作电压范围为:23V至36。因此,不能直接输出高电平为5V的PWM。

PWM信号含有丰富的谐波,谐波频率很高,一般不宜采用放大电路。

可以采用一个三极管工作在开关状态,三极管采用5V供电,即可输出高电平为5V的PWM,参考电路如下:

图中,VCC取5V即可。

下载器,也叫编程器,也叫烧录器
是用来将编译好的程序,下载到单片机芯片中。
仿真器是用来模拟仿真的,也就是说不用将程序下载到单片机中,而是在仿真器中模拟单片机运行,便于程序的调试。
单片机的烧录都是有次数的,达到一定次数,也就不能再烧录了,也有一次性的,只能烧录一次。
烧录器一端连接到电脑,就是你说的USB,用来将编译好的程序从电脑传输到烧录器。
另外一端要连接到单片机,就是你说的ISCP,用来将程序从烧录器传输到单片机芯片。
有些仿真器和烧录器是二合一的,两个功能都有。
烧录程序,就需要烧录器,电脑,烧录器的驱动程序,单片机芯片或带有单片机芯片的电路板。
连接就是烧录器一端连接到电脑,连接有USB,也有串口或并口的,另外一端连接到单片机芯片或带有单片机芯片的电路板。

我以现在最新的XC编译器为例:
XC8(8位单片机):C:\Program Files (x86)\Microchip\xc8\v110\docs\chips
XC16(16位单片机):C:\Program Files (x86)\Microchip\xc16\v111\docs\config_docs
XC32(32位单片机):C:\Program Files (x86)\Microchip\xc32\v111\docs\hlpPIC32MXConfigSetchm
我用的是Win7 64位系统,32位系统XC默认安装目录在C:\Program Files文件夹下。版本号也可能不一致,比如XC8编译器C:\Program Files (x86)\Microchip\xc8\v110\docs\chips,v110是当前我安装的XC版本号,这个地方要改成你安装的XC版本号。

你从microchip官网上下一些PIC32的例程就行啦,各种外设接口的例程都有,下面是定时中断的一个例程。在Debug模式下能正常进中断,RD0接口的LED闪烁表示芯片是好的
#include <plibh>
// Configuration Bit settings
// SYSCLK = 72 MHz (8MHz Crystal/ FPLLIDIV FPLLMUL / FPLLODIV)
// PBCLK = 36 MHz
// Primary Osc w/PLL (XT+,HS+,EC+PLL)
// WDT OFF
// Other options are don't care
//
#pragma config FPLLMUL = MUL_18, FPLLIDIV = DIV_2, FPLLODIV = DIV_1, FWDTEN = OFF
#pragma config POSCMOD = HS, FNOSC = PRIPLL, FPBDIV = DIV_2
// Let compile time pre-processor calculate the PR1 (period)
#define FOSC 72E6
#define PB_DIV 8
#define PRESCALE 256
#define TOGGLES_PER_SEC 1
#define T1_TICK (FOSC/PB_DIV/PRESCALE/TOGGLES_PER_SEC)
int main(void)
{
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
//STEP 1 Configure cache, wait states and peripheral bus clock
// Configure the device for maximum performance
// This macro sets flash wait states, PBCLK divider and DRM wait states based on the specified
// clock frequency It also turns on the cache mode if avaialble
// Based on the current frequency, the PBCLK divider will be set at 1:2 This knoweldge
// is required to correctly set UART baud rate, timer reload value and other time sensitive
// setting
SYSTEMConfigPerformance(FOSC);
// Override PBDIV to 1:8 for this timer example
mOSCSetPBDIV(OSC_PB_DIV_8);
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
// STEP 2 configure Timer 1 using internal clock, 1:256 prescale
OpenTimer1(T1_ON | T1_SOURCE_INT | T1_PS_1_256, T1_TICK);
// set up the timer interrupt with a priority of 2
ConfigIntTimer1(T1_INT_ON | T1_INT_PRIOR_2);
// enable multi-vector interrupts
INTEnableSystemMultiVectoredInt();
// configure PORTDRD0 = output
mPORTDSetPinsDigitalOut(BIT_0);
while(1);
}
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
// STEP 3 configure the Timer 1 interrupt handler
void __ISR(_TIMER_1_VECTOR, ipl2) Timer1Handler(void)
{
// clear the interrupt flag
mT1ClearIntFlag();
// things to do
// in this case, toggle the LED
mPORTDToggleBits(BIT_0);
}


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/13388522.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-07-26
下一篇 2023-07-26

发表评论

登录后才能评论

评论列表(0条)

保存