資料介紹
描述
可編程 I/O (PIO) 是為 RP2040 開發(fā)的新硬件。它允許我們?cè)诨?RP2040 的設(shè)備上創(chuàng)建新類型的(或附加的)硬件接口。RP2040 具有專用的硬件 PWM,但在這個(gè)小項(xiàng)目中,我們將使用 PIO 來(lái)驅(qū)動(dòng)伺服電機(jī)。
硬件設(shè)置
有關(guān)接線圖,請(qǐng)參閱原理圖部分。
開發(fā)環(huán)境設(shè)置
請(qǐng)按照此處的說(shuō)明安裝 C/C++ SDK 和工具鏈。
主程序
#include "hardware/clocks.h"
#include "hardware/pio.h"
#include "pico/stdlib.h"
#include "pico_servo.pio.h"
#define MIN_DC 650
#define MAX_DC 2250
const uint SERVO_PIN = 16;
/* Write `period` to the input shift register */
void pio_pwm_set_period(PIO pio, uint sm, uint32_t period) {
pio_sm_set_enabled(pio, sm, false);
pio_sm_put_blocking(pio, sm, period);
pio_sm_exec(pio, sm, pio_encode_pull(false, false));
pio_sm_exec(pio, sm, pio_encode_out(pio_isr, 32));
pio_sm_set_enabled(pio, sm, true);
}
/* Write `level` to TX FIFO. State machine will copy this into X */
void pio_pwm_set_level(PIO pio, uint sm, uint32_t level) {
pio_sm_put_blocking(pio, sm, level);
}
int main() {
PIO pio = pio0;
int sm = 0;
uint offset = pio_add_program(pio, &pico_servo_pio_program);
float freq = 50.0f; /* servo except 50Hz */
uint clk_div = 64; /* make the clock slower */
pico_servo_pio_program_init(pio, sm, offset, clk_div, SERVO_PIN);
uint cycles = clock_get_hz(clk_sys) / (freq * clk_div);
uint32_t period = (cycles -3) / 3;
pio_pwm_set_period(pio, sm, period);
uint level;
int ms = (MAX_DC - MIN_DC) / 2;
bool clockwise = false;
while (true) {
level = (ms / 20000.f) * period;
pio_pwm_set_level(pio, sm, level);
if (ms <= MIN_DC || ms >= MAX_DC) {
clockwise = !clockwise;
}
if (clockwise) {
ms -= 100;
} else {
ms += 100;
}
sleep_ms(500);
}
}
皮奧計(jì)劃
下面的程序在 GPIO 引腳上生成 PWM 信號(hào)。
; Side-set pin 0 is used for PWM output
.program pico_servo_pio
.side_set 1 opt
pull noblock side 0 ; Pull from FIFO to OSR if available, else copy X to OSR.
mov x, osr ; Copy most-recently-pulled value back to scratch X
mov y, isr ; ISR contains PWM period. Y used as counter.
countloop:
jmp x!=y noset ; Set pin high if X == Y, keep the two paths length matched
jmp skip side 1
noset:
nop ; Single dummy cycle to keep the two paths the same length
skip:
jmp y-- countloop ; Loop until Y hits 0, then pull a fresh PWM value from FIFO
% c-sdk {
static inline void pico_servo_pio_program_init(PIO pio, uint sm, uint offse t, uint clk_div, uint pin) {
pio_gpio_init(pio, pin);
pio_sm_set_consecutive_pindirs(pio, sm, pin, 1, true);
pio_sm_config c = pico_servo_pio_program_get_default_config(offset);
sm_config_set_sideset_pins(&c, pin);
sm_config_set_clkdiv(&c, clk_div);
pio_sm_init(pio, sm, offset, &c);
}
%}
該程序使用微伺服 (9g A0090) 進(jìn)行了測(cè)試。它應(yīng)該與類似的伺服系統(tǒng)一起使用。所有標(biāo)準(zhǔn)舵機(jī)都應(yīng)以 1000 毫秒到 2000 毫秒之間的值響應(yīng)。在我的情況下,我能夠使用下面的配置實(shí)現(xiàn)最小和最大角度,請(qǐng)?jiān)?main.c 中更改它以匹配您的伺服。
#define MIN_DC 650
#define MAX_DC 2250
構(gòu)建程序
$ export PICO_SDK_PATH=/path/to/pico/pico-sdk
$ git clone https://github.com/metanav/pico_servo_pio.git
$ cd pico_servo_pio
$ mkdir build && cd build
$ cmake ..
$ make
閃存程序
我們可以按照以下步驟將生成的 pico_pio_pwm.uf2 二進(jìn)制文件上傳到樹莓派 Pico。
- 按住 BOOTSEL 按鈕并將 Raspberry Pi Pico 插入計(jì)算機(jī)的 USB 端口。它將安裝為稱為 RPI-RP2 的大容量存儲(chǔ)設(shè)備。
- 將 pico_pio_pwm.uf2 二進(jìn)制文件拖放到 RPI-RP2 卷上。
刷新二進(jìn)制文件后,Raspberry Pi Pico 將重新啟動(dòng),程序?qū)㈤_始運(yùn)行。
- 用電機(jī)和Raspberry Pi Pico組裝人體骷髏
- 遠(yuǎn)程編程Raspberry Pi Pico
- Raspberry Pi Pico上的ADC采樣和FFT
- Raspberry Pi Pico多功能入門套件
- RP2040 Raspberry Pi Pico遇見LoRa
- Arduino Raspberry Pi Pico/RP2040以太網(wǎng):W5100S EVB Pico
- Raspberry Pi Pico作為HID鼠標(biāo)
- 基于Raspberry pi pico的音量控制宏鍵盤 3次下載
- 免費(fèi)Pico模擬器上的Raspberry Pi Pico和LCD1602接口
- 使用Raspberry Pi Pico的LED序列
- 如何在Raspberry Pi Pico中使用OLED顯示器
- 印有PINOUT的Raspberry Pi pico分線板
- 適用于Raspberry Pi 4的Raspberry Pi Pico開發(fā)板
- 基于BME680和Raspberry Pi Pico的氣象站
- raspberry pi Pico使用MicroPython變磚后的解決方法
- 5分鐘內(nèi)將Raspberry Pi Pico變成簡(jiǎn)單的示波器+波形發(fā)生器 4.1k次閱讀
- 基于Raspberry Pi 5的蜂窩物聯(lián)網(wǎng)項(xiàng)目 2.3k次閱讀
- 使用Raspberry Pi Pico W和MicroPython開發(fā)物聯(lián)網(wǎng)應(yīng)用 3.4k次閱讀
- Pico W的無(wú)線功能 1.8k次閱讀
- 基于Raspberry Pi Pico的云端溫濕度監(jiān)測(cè)站設(shè)計(jì) 2.7k次閱讀
- 基于樹莓派產(chǎn)品 Raspberry Pi微控制器板的優(yōu)缺點(diǎn) 3.6k次閱讀
- 如何從Raspberry Pi Pico的模數(shù)轉(zhuǎn)換器捕獲數(shù)據(jù)計(jì)算? 3.5k次閱讀
- 基于RP2040的Pico可用作PIO的邏輯分析儀 1.7w次閱讀
- 基于Raspberry Pi Pico開發(fā)先進(jìn)的家庭自動(dòng)化系統(tǒng) 3.6k次閱讀
- 微雪電子ZeroW| Raspberry Pi ZeroW主板簡(jiǎn)介 3.3k次閱讀
- 微雪電子Raspberry Pi 3 Model主板簡(jiǎn)介 4.9k次閱讀
- 微雪電子Raspberry Pi 3 Model擴(kuò)展板簡(jiǎn)介 2.4k次閱讀
- 利用Raspberry Pi構(gòu)建存儲(chǔ)和虛擬化時(shí)間序列數(shù)據(jù) 1.3k次閱讀
- 一文了解Raspberry Pi 4各項(xiàng)性能跑分 3.1w次閱讀
- 視覺享受!用Raspberry Pi實(shí)現(xiàn)圣誕樹燈光秀 9k次閱讀
下載排行
本周
- 1矽力杰 Silergy SY7215A 同步升壓調(diào)節(jié)器 規(guī)格書 Datasheet 佰祥電子
- 1.12 MB | 5次下載 | 免費(fèi)
- 2HT81696H 內(nèi)置升壓的30W立體聲D類音頻功放數(shù)據(jù)手冊(cè)
- 1.21 MB | 1次下載 | 免費(fèi)
- 3HTA6863 3W超低噪聲超低功耗單聲道D類音頻功率放大器數(shù)據(jù)手冊(cè)
- 0.87 MB | 次下載 | 免費(fèi)
- 4南芯 Southchip SC8802C 充電控制器 規(guī)格書 Datasheet 佰祥電子
- 88.16 KB | 次下載 | 免費(fèi)
- 5矽力杰 Silergy SY7065 同步升壓轉(zhuǎn)換器 規(guī)格書 Datasheet 佰祥電子
- 910.67 KB | 次下載 | 免費(fèi)
- 6矽力杰 Silergy SY7066 同步升壓轉(zhuǎn)換器 規(guī)格書 Datasheet 佰祥電子
- 989.14 KB | 次下載 | 免費(fèi)
- 7WD6208A產(chǎn)品規(guī)格書
- 631.24 KB | 次下載 | 免費(fèi)
- 8NB685 26 V,12 A,低靜態(tài)電流,大電流 同步降壓變換器數(shù)據(jù)手冊(cè)
- 1.64 MB | 次下載 | 2 積分
本月
- 1EMC PCB設(shè)計(jì)總結(jié)
- 0.33 MB | 12次下載 | 免費(fèi)
- 2PD取電芯片 ECP5702規(guī)格書
- 0.88 MB | 5次下載 | 免費(fèi)
- 3矽力杰 Silergy SY7215A 同步升壓調(diào)節(jié)器 規(guī)格書 Datasheet 佰祥電子
- 1.12 MB | 5次下載 | 免費(fèi)
- 4氮化鎵GaN FET/GaN HEMT 功率驅(qū)動(dòng)電路選型表
- 0.10 MB | 3次下載 | 免費(fèi)
- 5PD取電芯片,可取5/9/12/15/20V電壓ECP5702數(shù)據(jù)手冊(cè)
- 0.88 MB | 3次下載 | 免費(fèi)
- 6SY50655 用于高輸入電壓應(yīng)用的偽固定頻率SSR反激式穩(wěn)壓器英文資料
- 1.01 MB | 3次下載 | 免費(fèi)
- 7怎么為半導(dǎo)體測(cè)試儀選擇精密放大器
- 0.65 MB | 2次下載 | 免費(fèi)
- 8SY52341 次級(jí)側(cè)同步整流英文手冊(cè)
- 0.94 MB | 2次下載 | 免費(fèi)
總榜
- 1matlab軟件下載入口
- 未知 | 935137次下載 | 10 積分
- 2開源硬件-PMP21529.1-4 開關(guān)降壓/升壓雙向直流/直流轉(zhuǎn)換器 PCB layout 設(shè)計(jì)
- 1.48MB | 420064次下載 | 10 積分
- 3Altium DXP2002下載入口
- 未知 | 233095次下載 | 10 積分
- 4電路仿真軟件multisim 10.0免費(fèi)下載
- 340992 | 191469次下載 | 10 積分
- 5十天學(xué)會(huì)AVR單片機(jī)與C語(yǔ)言視頻教程 下載
- 158M | 183360次下載 | 10 積分
- 6labview8.5下載
- 未知 | 81606次下載 | 10 積分
- 7Keil工具M(jìn)DK-Arm免費(fèi)下載
- 0.02 MB | 73832次下載 | 10 積分
- 8LabVIEW 8.6下載
- 未知 | 65991次下載 | 10 積分
電子發(fā)燒友App





創(chuàng)作
發(fā)文章
發(fā)帖
提問(wèn)
發(fā)資料
發(fā)視頻
上傳資料賺積分
評(píng)論