現在、マイコンを使用して装置を制御したいと考えています。制御内容は各センサーをモニターして、アクチュエータ等を1~2ms間隔で制御が必要です。しかし、途中でUART、I2Cを使用した他との通信が生じた場合、十数ms間,通信に占有されてしまうので、センサー等のモニターが途絶えてしまうと思われます。割込みを使用しても、同じことが発生すると考えています。
このような場合、どのように対処しているかいい方法、考え方があれば、教えて下さい。
気になる質問をクリップする
クリップした質問は、後からいつでもMYページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
回答3件
0
マイコンやセンサー種類が書かれてないので、そちらの環境とはだいぶ違うとは思いますが。。
使用した環境は、CPUが約200MHz、ペリフェラルはCPUの半分(約100MHz)で駆動、直接読み出せるADC(複数のっている)と、DMA対応SPI(10Mbps)で、電圧、電流、温度、物体の位置センサーなどを読みだして、その情報から、PWM信号などを生成するというような制御でした。
制御処理は、10KHzでしたが、これは、基本的には、ポーリングのような形でやってました。
CPUは20KHz毎にタイマ割り込み(のようなもの)で定期的に起こして、処理は半分ずらして、うまくわけて(偶数、奇数フェーズ??)、やりました。
たとえば、
偶数フェーズでは、SPIの設定、計算されたPWM値の変更、
奇数フェーズでは、SPIで転送されたデータやADCの読み出し、それによるつぎに設定するPWM値の計算
という感じで、それぞれ、タイミングなど許容できるようなかたちで、スケジュールを組みました。
システム自体は、RTOSを使用していて、低速の通信・その他の処理は、普通のOSのタスクから行ってました。
1~2ms間隔で制御が必要
500Hz~1KHzくらいの処理だと、どうでしょうかね?
投稿2018/03/20 01:13
編集2018/03/20 01:15総合スコア1825
0
ベストアンサー
マイコン内蔵のUARTやIICのデバイスは割り込みで駆動できるようになってます
これらすべての動作を割り込み駆動できるようにすれば、バックグラウンドで動作できるようになります。
そういう環境を構築した上で、メインルーチンで処理を行います
投稿2018/03/20 00:36
総合スコア87774
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2018/03/20 00:45
2018/03/20 00:52
2018/03/20 00:55
2018/03/20 00:56
2018/03/20 01:00
2018/03/20 01:10
2018/03/20 01:12
2018/03/20 01:17
2018/03/20 01:26
0
お使いになっているマイコンシステムが判らないので一般的な話としますが、私の知る限りでは通信でCPUが長期間占有される(割り込みすら不可能な状態が続く)ということはありません(よほどしょぼいシステムでない限り)。コントローラー内蔵のFIFOバッファと割り込みの仕組みにより、CPUへの負荷は微々たるものです(1msecという時間単位で見れば)。
なので、タイマーで一定周期の割り込みを発生させて、センサーやアクチュエーターの制御はその中でやらせれば、通信中でも途切れることはないと思います。
投稿2018/03/20 02:28
総合スコア5938
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
あなたの回答
tips
太字
斜体
打ち消し線
見出し
引用テキストの挿入
コードの挿入
リンクの挿入
リストの挿入
番号リストの挿入
表の挿入
水平線の挿入
プレビュー
質問の解決につながる回答をしましょう。 サンプルコードなど、より具体的な説明があると質問者の理解の助けになります。 また、読む側のことを考えた、分かりやすい文章を心がけましょう。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2018/03/20 01:21