質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Raspberry Pi

Raspberry Piは、ラズベリーパイ財団が開発した、名刺サイズのLinuxコンピュータです。 学校で基本的なコンピュータ科学の教育を促進することを意図しています。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

解決済

3回答

1436閲覧

Raspberry Pi 3を使って200kHzのLチカをする方法

R_SSK

総合スコア15

Raspberry Pi

Raspberry Piは、ラズベリーパイ財団が開発した、名刺サイズのLinuxコンピュータです。 学校で基本的なコンピュータ科学の教育を促進することを意図しています。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

0クリップ

投稿2019/06/07 13:28

RaspberryPi3を使って高速ストロボ撮影をしようと思い、WiringPiを使って簡単なプログラムを作成して試してみましたが、オシロスコープで見ると周波数が100kHz程度までしか上昇しません。
理想としては200kHz程度まであげたいのですが、解決方法はございますでしょうか。ご教授お願い致します。

Python

1# -*- coding:utf-8 -*- 2 3import wiringpi 4import time 5 6# frequency of pulse 7# freq = (200e3)**-1 これぐらいの周波数がほしいが、これでは20kHz程度にしかならない 8freq = (200e4)**-1 9 10led_pin = 23 11 12wiringpi.wiringPiSetupGpio() 13wiringpi.pinMode(led_pin, 1) 14 15try: 16 while True: 17 wiringpi.digitalWrite(led_pin, 1) 18 time.sleep(freq/2) 19 20 wiringpi.digitalWrite(led_pin, 0) 21 time.sleep(freq/2) 22 23 24except KeyboardInterrupt: 25 pass

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答3

0

ベストアンサー

R_SSKさん、

特定のピンでしか対応していませんが、ハードウェアPWMを使うのはどうでしょう。

gpio readallとやって出てくる、(Physical12/BCM18/wPi1)ピンがその対応している一つなので、例を書きます。

とりあえず、これで、200kHzの信号が出てくるでしょうか?(いま、こちらでは動作確認できないので、報告をもらえるとありがたいです。)

gpio mode 1 pwm # wPiの番号で指定(デフォルト) : (Physical12/BCM18/wPi1) gpio pwm-ms # PWM動作モード gpio pwmr 16 gpio pwmc 6 gpio pwm 1 8 # 出力開始 . . gpio pwm 1 0 # 停止(LOW)
  • 簡単な説明

gpioコマンドで、ラズパイのHW PWMを設定するパラメータは、5つ

gpio mode <pin> pwm : Pinの設定 gpio <pwm-balまたはpwm-ms> # Mode: pwm-bal(balanced)/pwm-ms(mark space) だいたい、pwm-msを使う。 gpio pwmr <pwmr_val> # PWM Duty Cycle Range: pwmr_val = 2~4096 gpio pwmc <pwmc_val> # Clock divider: pwmr_val = 2 ~ 4095 gpio pwm <pin> <pwm_val> # val = 0 ~ pwmr_val これで、dutyを決めます。

出力される周波数 = 19.2MHz / (pwmr * pwmc)
とのことなので、最大で、(pwmr,pwmc)=(2,2)のときで、4.8MHzまで、いけるらしいです。

Clock dividerで、基本のクロック、(Duty Cycle Range * 基本クロック)が、PWMの周波数、
pwmコマンドのパラメータで、HIGHにする分を決めます。

200KHzをつくるとすると 19.2MHz/200KHz = 96 なので、
(pwmr,pwmc)= (2,48), (3,32), (4, 24), (6,16), (8,12), ... というのが使えるので、
(pwmr,pwmc)=(16, 6)あたりを使うとします。

基本のクロックは、19.2MHz / 6 = 3.2MHz (0.3125us / clk)
pwmrの16のうち、8clk分をHIGHにして、残り8clkをLOWとすると、
0.3125us * 8 = 2.5usecで、HIGH / LOWが繰り返される => 5us周期 => 200kHz

HIGH/LOWの率を変えると、LEDの明るさだったり、モーターの位置だったり、制御できるようになると思います。

投稿2019/06/07 17:21

mt08

総合スコア1825

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

R_SSK

2019/06/10 08:19

お返事が遅くなり申し訳ございません。手元にあったラズパイで実行していましたがうまくいかず,ほかのラズパイを借りてやってみたら回答いただいたコードで上手く行きました! ピンの故障か環境の違いのせいかはわかりませんができることがわかったので良かったです。 ご丁寧に例と説明まで加えていただき勉強になりました。ありがとうございました!
guest

0

while True: wiringpi.digitalWrite(led_pin, 1) time.sleep(freq/2) wiringpi.digitalWrite(led_pin, 0) time.sleep(freq/2)

というコードなので、1回のループにかかる時間は、wiringpi.digitalWriteを2回実行する時間+time.sleep(freq/2)を実行する時間になります。
wiringpi.digitalWriteの実行にかかる時間が0で、ループの繰り返し処理にかかる時間が0なら原理的には200KHzの信号が出るでしょうが、実際にはwiringpi.digitalWriteの実行にもループの繰り返し処理にも時間がかかります。

とりあえず、”time.sleep(freq/2)”の行を(2行とも)削除して、実行してみてください。
そこで得られる信号の速度が、Raspberry pi 3のソフトウェアで実現できる能力の限界です。

投稿2019/06/09 05:34

coco_bauer

総合スコア6915

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

R_SSK

2019/06/10 08:13

回答ありがとうございます! 呼び出しをなくして実行してみたところ大体290〜300kHzまで出ました。 おっしゃる通り呼び出しの時間が大きいのでソフトでの実行は難しいみたいですね。勉強になりました!
coco_bauer

2019/06/11 08:56

290KHzまで出たのなら、time.sleepの引数を調整したら200KHzも出せそうですね。
R_SSK

2019/06/13 05:13

そうですね、間に何か時間がかかる処理を挟めば力づくで出来そうですがハードウェアPWMでできました!ソフトでやらざるを得ないときに試してみたいと思います。ありがとうございました!
guest

0

pythonを使ってる限りはその程度でしょう。
おそらくはC言語あたりを使えば高い周波数は出せるでしょうけど、一定周期にはなりません。

真面目にそういうのを実装しようとするなら、外部回路を組むことですね


ラズパイにもタイマデバイスが内蔵されているようなので、それを使えば外部回路を使わなくて済みます。
「ラズパイ タイマ」でぐぐるといくつか記事が引っかかりますね

投稿2019/06/07 14:02

編集2019/06/07 14:15
y_waiwai

総合スコア87774

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

R_SSK

2019/06/10 08:23

ご回答ありがとうございます! やはりPythonなどを使ったソフトでの制御は難しいようです。 電子工作は勉強を始めたばかりで上手くいかない原因も当てがつかない状態のため助かりました。 外部回路,タイマデバイスについて勉強したいと思います。ありがとうございました!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問