PIC 微控制器怎么选:PIC10F 到 dsPIC33F 六道资源边界七步核对

同样叫 PIC,PIC10F 只有 16 字节 RAM,dsPIC33F 有 8 KB 和 6 通道 DMA。本文按 Microchip 选型指南,把 Flash 字与字节、I/O、ADC、通信与电机外设六道边界逐条算清。

2026-11-01
PIC选型PIC18FdsPIC33F资源边界嵌入式开发MCU选型

一个小家电控制器原本用 PIC16F684,新需求要加 CAN、12 位 ADC 和十几路按键,采购把选型表发过来,从 PIC10F200 一直排到 dsPIC33FJ256MC710,光 Flash 的标法就有三种。结论先给:PIC 选型不能看型号数字大小,要按六道资源边界逐条卡——指令宽度与速度、存储容量、I/O 与封装、ADC、通信外设、电机专用外设,卡到哪一道不够就升到哪一级,多升一级往往就是换封装、换开发工具。

本文按 Microchip《产品选型指南》(2006.03)整理,所有型号的资源数字均取自该表,字节数由标称位宽换算得到。

一、先认清三条产品线,别把 8 位和 16 位混着比

选型表把 PIC 分成三段:PIC10F/12F/16F 是 8 位中低端,PIC18F 是 8 位增强型,dsPIC30F/33F 是 16 位数字信号控制器。三段的指令周期差一个数量级,拿"Flash 都是 8K"去横比没有意义。

家族指令周期指令数最高时钟供电Flash 标注单位
PIC10F500 ns33 条内部 4 MHz(220/222 为 8 MHz)—Words(12 位)
PIC12F500 ns~1 µs33/35 条20 MHz—Words(12 位)
PIC16F200 ns35 条20 MHz—Words(14 位)
PIC18F10 MIPS77 条40 MHz2.0~5.5 VWords(16 位)
dsPIC30F30 MIPS16 位指令—2.5~5.5 VKWords(24 位)
dsPIC33F40 MIPS16 位指令—3.3 VKbyte

这张表里最容易被忽略的是"供电"一列:dsPIC33F 是 3.3 V 器件,周边若是 5 V 传感器,电平转换要提前算进 BOM;dsPIC30F 和 PIC18F 都能直接跑 5 V,这也是很多工业现场还留着 30F 的原因。

二、第一道边界:Flash 按"字"标,换算成字节差一倍

PIC16F 的一个程序字是 14 位,PIC18F 是 16 位,dsPIC30F 是 24 位,dsPIC33F 干脆直接标 Kbyte。同一个"8K",PIC16F876A 是 8192×14 位,折合 14336 字节;PIC18F 的 8K 字是 16384 字节;dsPIC30F2010 的 4K 字按 24 位算是 12288 字节。编译器报"程序空间不足"时,先确认自己用的是字还是字节。

型号选型表标法折算字节SRAMEEPROMI/O封装
PIC10F200256×12384 B16 B—46OT、8P
PIC12F6751024×141792 B64 B128 B68P、8SN、8MF
PIC16F6842048×143584 B128 B256 B1214P、14SL、14ST
PIC16F876A8192×1414336 B368 B256 B2228SP、28SO、28SS、28ML
PIC18F452016384×1632768 B1536 B256 B3640P、44ML、44PT
dsPIC30F20104 KWords12288 B512 B1024 B—28SO、28SP、28MM
dsPIC33FJ64MC50864 KB65536 B8 KB—6980PT

三、第二道边界:RAM 与 EEPROM 决定协议栈能放多少

Flash 决定功能能不能写完,RAM 决定运行起来会不会爆。PIC10F200 只有 16 字节 RAM,连一个 8 路按键的消抖缓冲都放不下;PIC16F684 的 128 字节要装栈、变量和通信缓冲,做 Modbus 从站时 100 个保持寄存器就需要 200 字节,直接超了。到 PIC18F4520 的 1536 字节才谈得上多任务缓冲,dsPIC33FJ64MC508 的 8 KB 才有余量跑双 ADC 乒乓和 DMA 描述符。

EEPROM 是另一笔账:PIC12F675 有 128 字节,PIC16F684、PIC16F876A、PIC18F4520 都是 256 字节,dsPIC30F2010 有 1024 字节,dsPIC30F6010 给到 4096 字节。参数表、标定系数、累计量都放这里,容量不够时要么外挂 24C 系列,要么把参数压到 Flash 末尾扇区自己管擦写。

四、第三、四道边界:I/O 与 ADC 通道

I/O 数量先看按键、继电器和指示灯,再看封装能不能上产线。PIC10F200 只有 4 个 I/O,PIC12F675 是 6 个,PIC16F684 是 12 个,PIC16F876A 是 22 个,PIC16F877A 是 33 个,PIC18F4520 是 36 个,dsPIC33FJ64MC508 最多 69 个。封装从 6 脚 OT 一直到 100 脚 PT,每上一档,PCB 面积和贴片成本都要跟着改。

型号ADC模拟比较器PWM16 位定时器
PIC10F200无(220/222 为 2 路 8 位)——1 个 8 位 + WDT
PIC12F6754 路 10 位1—1×16 位 +1×8 位
PIC16F6848 路 10 位211×16 位 +2×8 位
PIC16F876A5 路 10 位221×16 位 +2×8 位
PIC18F452013 路 10 位223×16 位 +1×8 位
dsPIC30F20106 路 10 位、1 Msps—6 路电机 PWM3×16 位
dsPIC33FJ64MC5081 个 ADC、18 通道、4 路 S/H—8 路电机 PWM9×16 位

分辨率要按被测量算:10 位是 1024 级,5 V 满量程下每级约 4.9 mV;12 位是 4096 级,每级约 1.2 mV。选型表里 dsPIC33F 单列了"12 位 500 ksps"一栏,但 dsPIC33FJ64MC508 在该栏是空的,只有 10 位 1 Msps 的 18 通道 ADC——想要 12 位就得往上挑同系列里有标注的型号,这一步很容易看漏。

五、第五道边界:串口、CAN、USB,决定要不要换家族

这条边界最费钱,因为一旦要 CAN 或 USB,基本就要离开 PIC16F。表里写得很清楚:PIC16F684 没有硬件串口,要做串口通信只能软件模拟;PIC16F688 只有 EUSART;PIC16F876A 才配齐 AUSART 加 I2C/SPI。CAN 在 PIC18F2480 上是全速 CAN 2.0B,带 3 个发送缓冲、2 个接收缓冲、2 个验收屏蔽器和 6 个验收滤波器;USB 在 PIC18F4550 上是全速 USB 2.0,48 MHz 时钟。

型号UARTSPI/I2CCANUSB专用外设
PIC16F684无(需软件模拟)无———
PIC16F6881 路 EUSART无———
PIC16F876A1 路 AUSART各 1 路———
PIC18F24801 路 AUSART各 1 路CAN 2.0B,3 发 2 收—6 个验收滤波器
PIC18F45501 路 EUSART各 1 路—全速 USB 2.048 MHz
dsPIC30F40112 路1 路 SPI、1 路 I2C1 路—4 路输入捕捉、QEI
dsPIC33FJ64MC5082 路2 路 SPI、2 路 I2C1 路—6 通道 DMA、QEI

六、第六道边界:电机与运动控制专用外设

做电机控制时,通用定时器凑出来的 PWM 和专用电机 PWM 是两回事。dsPIC30F2010 给的是 6 路电机控制 PWM、4 路输入捕捉、2 路输出比较,外加 QEI 硬件正交解码和 6 通道 10 位 ADC;dsPIC30F6010 扩到 8 路 PWM、8 路捕捉、8 路比较、16 通道 ADC 和两路 CAN;dsPIC33FJ64MC508 则是 8 路 PWM、9 个定时器、6 通道 DMA、40 MIPS,并继续保留 QEI。PIC18F4520 只有 2 路 CCP PWM,也没有 QEI,低速转台还能靠软件解码,高速伺服就会丢步。

QEI 的价值在于把 A/B 相解码、倍频、方向判断、索引复位全放进硬件,CPU 只在计满或索引时收一次中断;软件解码在 1 MHz 以上的计数率时,中断开销会直接吃掉控制环的时间预算。这一条边界,是 16 位 dsPIC 与 8 位 PIC 最本质的分界。

七、七步核对与三个架构拐点

  1. 先数通信口:要 CAN 直接看 PIC18F2480 或 dsPIC30F4011,要 USB 看 PIC18F4550,只有一路串口才留在 PIC16F。
  2. 再数 ADC 通道与位数:超过 8 路或需要 12 位,跳到 dsPIC33F 家族。
  3. 算 RAM:协议帧加参数表超过 1 KB,从 PIC18F4520 起步。
  4. 按标称位宽把 Flash 折成字节再和编译器报告对比,别直接比"K"。
  5. 核对 I/O 与封装:14/20/28/40/44/64/80 脚,先确认结构件和贴片设备。
  6. 电机类项目核对 PWM 路数、QEI 与输入捕捉数量。
  7. 最后核供电与工具链:dsPIC33F 是 3.3 V,dsPIC30F 与 PIC18F 可到 5 V。
/* 把选型边界写成编译期断言,换型号时先让编译器报错 */
#define FLASH_BYTES   14336u    /* PIC16F876A:8192 x 14 bit */
#define RAM_BYTES       368u    /* PIC16F876A SRAM */
#define EEPROM_BYTES    256u    /* PIC16F876A EEPROM */

#if (FLASH_BYTES < 32768u)
#error "程序空间不足:14 KB 不够,需换 PIC18F4520(32 KB)"
#endif

#if (RAM_BYTES < 1024u)
#error "RAM 不足:协议帧与参数表放不下,需换 PIC18F4520(1536 B)"
#endif

#if (EEPROM_BYTES < 512u)
#error "EEPROM 不足:参数区需外挂 24C 或改 dsPIC30F2010(1024 B)"
#endif
现象常见根因改法
程序"空间够"却编译溢出把字当成字节算,少算一倍按 14/16/24 位折算字节后再评估
串口只能软件模拟选了 PIC16F684,无硬件串口升到 PIC16F688 或 PIC16F876A
CAN 丢帧接收缓冲和验收滤波器数量不够选带 6 个滤波器的 PIC18F2480,或 dsPIC 双 CAN
伺服低速抖动、位置漂移无 QEI,软件解码丢边沿换带 QEI 的 dsPIC30F/33F
12 位采样精度达不到所选型号只有 10 位 ADC核对选型表 12 位列有标注的型号
换板后 5 V 传感器异常dsPIC33F 为 3.3 V 供电加电平转换,或退回 5 V 的 dsPIC30F

一句话总结:PIC 选型的三道坎是"存储按字算、外设按需算、电压按现场算"。先数通信口和 ADC 通道定家族,再用字节数核对 Flash 与 RAM,最后用封装和供电收口;把这三步写成编译期断言,下次换型号就不会靠猜。

还想接着看:STM32F101 低成本 RTU 的四档升级边界、dsPIC30F2010 的 MCPWM 死区与 ADC 同步采样、PIC16F 片内比较器做低压检测与窗口比较。

本文基于 Microchip《产品选型指南》(2006.03)技术资料整理优化。

需要定制开发?

沧州艾诺威电子 — 国家高新技术企业,20+项国家专利
嵌入式系统开发 · 物联网方案 · AI智能硬件 · 一站式交付

立即微信咨询

电话:13930711029 | 邮箱:tech@czinv.com | 24小时内响应