Wednesday, January 4, 2017

Moving Moyenne Filtre Msp430

Embedded Engineering En poste. Je vais vous montrer comment mettre en œuvre le plus simple filtre numérique quotmoving moyenne filterquot. Bien qu'il soit très facile à mettre en œuvre, mais encore dans de nombreuses applications, cela est plus que suffisant. Par exemple en réduisant le bruit aléatoire du signal. Bien sûr quand il est très simple, il a des problèmes comme. Il n'a pas de filtre très net Réponse. Entrée canal 1. Balayage de 20Hz à 6Khz, Canal 4 (Vert) Sortie filtrée 15 points, Sortie M (Rouge) dans domaine freq Samedi, 1er octobre 2016 Ce projet est la partie finale de la réalisation d'une lumière solaire très puissante. Dans ce projet, nous Intigrate LTC3478 base philips lumileds Driver et BQ24650 basée MPPT solaire Li-ion chargeur. Nous utiliserons 3 9 Watt chaque panneau de conducteur de LED et un contrôleur de charge pour recharger la batterie de 6 cellules 7.6V 20000mah li-lion, il ya 4 affichage de graphique de barre de LED pour montrer le niveau de batterie d'estimation et un seul bouton pour commander Onoff, De luminosité. Et sélectionnez-en un. Tout ou peu de panneaux LED à litup. Il n'y a pas beaucoup à décrire en terme de schmeatic et firmware que tous les Firmware et Schmeatic aer déjà sur mon compte github. Utilisation interface utilisateur est faite de PCB avec 4 batterie état LED un port pour panneau solaire connecteur et un commutateur de contrôle. Lorsque la batterie est chargin LED état affiché en conséquence et lorsque la batterie est de décharge led état mis à jour en conséquence. En plus du petit projet d'éclairage solaire sur lequel je travaillais, j'ai créé ce petit contrôleur de charge solaire pour recharger la batterie lithium-ion (li-ion). Circuit Utiliser le Texas Instrument BQ24650 au cœur de la boucle pour contrôler la charge. Comme le circuit a mosfet externe ainsi le courant maximal de 160charge peut être ajusté aux valeurs vraiment élevées. 160Circuit acceptent des valeurs de panneaux solaires de 5V à 28V. Je l'ai testé avec 12V nominal (17Volts circuit ouvert) 160. et 24 Volts nominal panneau solaire à la charge de batterie jusqu'à 4A. Actuellement installé dans ma maison depuis quelques mois Charger une batterie 20000 mah li-ion. Le circuit a le grand connecteur de Molex de capacité courant 4 broches pour le panneau solaire. Connecteur 6 broches pour la batterie et le commutateur de charge. Il est également possible de connecter NTC pour la surveillance de la température de la batterie. BQ24650 peut automaticalley surveiller temprature de la batterie. Le microcontrôleur a dédié la sortie de 3 PWM pour l'obscurcissement de LED et l'en-tête de 6 gpio pour le meilleur état conduit et une clef d'interface d'utilisateur. Hallo zu Deutsch Leser. Das ist mein erste Artikel auf Deutsch. Je parle de l'Allemagne, de l'Allemagne, de l'Allemagne, de l'Allemagne, de l'Allemagne, de l'Allemagne, de l'Allemagne, de l'Allemagne, de l'Allemagne, de l'Allemagne, de l'Allemagne, de l'Allemagne, de l'Allemagne, de l'Allemagne et de l'Allemagne. Meine erfahrungen auf deutsch kurze ist 160 160 160 160So beginnen wir. Heutzutage arbeite ich an einem Projekt. QuotMPPT Solar li-ion Laderquot. Bei diesem projekt brauche ich eine160sehr160vollmacht LED de 25W LED. Aber 25W ist viel fourrure ein160LED-Triber. Échappement de vieillissement de 25 W LED-Triber zu entwerfen. Hauptsorge auf die Projket quotMPPT Solaire - Lon Laderquot ist zu Lernen avec le MPPT Larder Arbeitet und wie die logiciel Algorithmus sind. Das Projekt ist ein teil von ein Projekt was publiziere ich spter.160 160 160 160 Réticemment, je travaillais un 160little projet d'éclairage solaire , J'ai besoin d'un éclairage vraiment insouciant de 25W 160LED. Mais la question a été pour 25W il un lot de puissance pour LED et il faut certaines compétences pour faire un tel pilote de LED haute puissance. Objectif principal de ce projet est d'obtenir une connaissance de la descente de contrôleur de charge MPPT et MPPT algorithmes de charge. Ce projet fait partie du projet. Que je vais poster plus tard. 160160160 Ce post va être la 4ème partie dans la série de faire un Linux ARM Board capable à la maison. Cliquez sur Premier. Deuxième et troisième pour aller à des parties précédentes, alors laissez démarrer. Ce qui est un chargeur de démarrage, pourquoi avons-nous besoin de it160 un chargeur de démarrage est un programme qui est le premier à être exécuté par la CPU. Il sévère un but très spécifique pour conférer quelques choses très essentielles avant de charger le programme principal (peut être OS) dans la mémoire principale. C'est pourquoi il est appelé boot loader. Selon les besoins chargeur de démarrage peut faire une autre tâche (nous allons les couvrir ici). Il existe différentes formes et tailles des chargeurs de démarrage. Ils servent presque presque le même but. Avec des microcontrôleurs. Certaines fois il ne charge pas réellement le programme principal dans la mémoire mais passe sur le pointeur d'exécution au programme principal de sorte que le programme principal puisse exécuter directement la mémoire où il est. Board Avec l'application Qt5 d'affichage à cristaux liquides d'affichage à cristaux liquides de 4.3 pouces pour montrer l'image de JPEG et l'heure Dans ce didacticiel j'ai l'intention de courir à travers les bases du MPU6050, avec configurer la puce et lire des données de lui. J'ai l'intention de couvrir le filtrage dans un post plus tard. Aussi s'il vous plaît prendre tout ce que j'écris avec une pincée de sel, comme à la fin de la journée, je suis encore juste un étudiant, et pourrait facilement avoir mal compris ou mal lu quelque chose. La source complète peut être consultée à githubbig5824Quadrocopter. Quoi qu'il en soit, vers le bas aux affaires. Le MPU6050 est une puce à 6 degrés de liberté d'Invensense, contenant un accéléromètre à trois axes et un gyroscope à trois axes. Il est alimenté par une alimentation de 3,3 V et communique via I2C à une vitesse maximale de 400 kHz. Cette puce est également disponible dans un paquet SPI connu sous le nom MPU6000, que j'aurais préféré utiliser étant donné le choix en raison du débit beaucoup plus élevé de SPI. Cependant, pour une raison quelconque, le monde semble préférer la version I2C, donc c'était la seule version que je pouvais trouver avec une carte de discussion. Les avantages principaux de cette puce sont les suivants: sélectionnable -24816g gamme accéléromètre sélectionnable -25050010002000 gamme de gyroscope de dégagement 16 bits de sortie des deux capteurs Gyroscope sensibilité à l'accélération linéaire de 0,1 degrés, une amélioration considérable sur les gyroscopes tri axes d'autres entreprises. Faible bruit sur les deux sorties, voir la feuille de données Taux de sortie de données jusqu'à 1000Hz, bien que le filtre passe-bas numérique intégré a une fréquence de coin maximale de 256Hz. Cependant, la documentation de carte d'enregistrement mentionne éteindre le DLPF, ainsi Im ne savez pas qui croire en ce moment. Une autre caractéristique de cette puce est le processeur de mouvement numérique embarqué (DMP). En théorie, ceci peut être utilisé pour produire directement des angles d'euler, des quaternions ou une matrice de cosinus de direction, et même effectuer un filtrage avec l'intégration des données d'une boussole I2C externe. Cela semble très bien sur le papier, mais en réalité Invensense ont été très réticents à fournir tout type de code source ou documentaire sur la façon d'utiliser le DMP, sauf si vous signez un accord de non-divulgation, autant que je sais que personne n'a vraiment ce travail à Tout son potentiel à ce jour. Pour résumer, cette puce est une amélioration massive sur tous les capteurs précédents que j'ai utilisé, et il vient dans un seul paquet. Il ya même une version 9DoF MPU9150 à venir, que j'ai l'intention d'acquérir dès sa sortie en 2012 Q2. J'allais écrire un tutoriel I2C, mais contrairement au MPU6050, il ya déjà beaucoup de tutoriels sur ce module, donc je vais juste vous pointer ici pour une explication du protocole I2C, et à l'exemple de Microchips I2C ici pour le code J'ai basé mon pilote I2C hors tension. La configuration du MPU6050 Setup s'effectue en écrivant sur les différents registres de configuration. J'ai seulement besoin d'écrire à trois registres à la fin, laissant le reste comme des zéros, mais il est toujours une bonne pratique pour écrire ces zéros juste au cas où le registre n'a pas réinitialiser correctement. J'ai utilisé le code d'ici pour gagner du temps, comme ce fichier d'en-tête me laisser sauter le processus fastidieux de nommer chaque adresse de registre moi-même. La première ligne définit l'adresse de la puce, qui pour moi était 0x69 depuis que j'ai tiré AD0 haut. Cette valeur est mémorisée dans les 7 bits les plus significatifs, le bit le moins significatif étant le bit readwrite. Lorsqu'il est effacé, cela indique à la puce qu'une écriture est sur le point de se produire, et lorsqu'il est défini, il indique à la puce d'envoyer des données à partir de l'adresse de registre spécifiée. Ce réglage et cette compensation s'effectuent en ORant l'adresse avec 0x01 pour une lecture, ou en la laissant intacte pour une écriture. Cette opération est effectuée par le pilote I2C. Pas toutes ces adresses sont écrits, et certains ne sont même pas mentionnés dans la fiche technique, donc je n'ai aucune idée comment l'auteur a compris ce qu'ils sont. J'ai ignoré tous ceux absents de la fiche technique. La première partie de la configuration est de vérifier le fonctionnement de la liaison I2C. Cela se fait simplement en lisant le registre à 0x75, appelé MPU6050RAWHOAMI. Cela contient l'adresse I2C des puces, qui est toujours 0x68, indépendamment de l'état de AD0. Cette petite bizarrerie m'a pris pendant des heures pendant que je trawled à travers chaque morceau de mon code I2C essayant de découvrir pourquoi il wouldnt retourne 0x69. Les lectures sont effectuées à l'aide de la fonction LDByteReadI2C, étant donné l'adresse de la puce (0x68 avec la broche AD0 basse, 0x69 avec elle haute), l'adresse du registre à lire, l'adresse de la variable 8 bits pour stocker les données, Et le nombre d'octets à lire (une valeur de 2 lirait à la fois 0x68 puis 0x69 ou 69 puis 70). Si cette communication est réussie, vous savez vos fonctions de puce partiellement, félicitations L'étape suivante consiste à écrire dans tous les registres de configuration. J'ai essayé de décrire les changements de configuration que je fais avec chaque enregistrement écrire dans les commentaires au-dessus de chaque ligne. J'ai aussi une fonction qui lit chaque registre pour vérifier les erreurs d'écriture, qui se produisent, donc je recommande d'inclure ce aussi bien. Je ne le posterai pas ici pour économiser de l'espace, mais n'hésitez pas à m'envoyer un courriel pour cela, Im normalement assez rapide avec des réponses. Après cela, votre MPU6050 doit être entièrement configuré et prêt à l'emploi Ci-dessous sont un tas de fonctions utilisées pour lire et convertir les données du capteur, plus une fonction pour déterminer les décalages gyro. Si ce code a fonctionné pour vous, vous devriez maintenant avoir accès à un taux de gyroscope en degrés et un angle d'accéléromètre. Il suffit de vous méfier, vous devrez définir vos propres sensibilités gyro, car il dépend de l'échelle que vous sélectionnez dans la configuration. Cela n'a pas d'importance avec les accéléromètres, car la fonction atan2 repose uniquement sur le ratio des deux. Comme vous l'avez dit, quand dans le mode -250 degrés la sensibilité gyroscopique est de 131 LSBdps, donc diviser par cela et vous obtiendrez une sortie en degrés. Les sensibilités pour les autres échelles sont dans la feuille de données quelque part. Quant à combiner les deux capteurs en un seul, vous devez mettre en œuvre une sorte d'algorithme de fusion. J'utilise un filtre complémentaire dans mon code quad ici githubbig5824Quadrocopter. Mais idéalement, vous utilisiez un filtre kalman. J'expérimente avec la version adaptée de votre code pour le Pi de framboise. J'ai eu des problèmes similaires à Rajiv, mais alors ils ont juste trié par magie après avoir exécuté le programme à quelques reprises. Je n'ai aucune idée de la raison. Je peux seulement supposer que j'ai eu une connexion dodgey ou que les erreurs d'écriture intermittentes aléatoires signifiait que plusieurs tentatives ont été nécessaires pour amorcer les registres lors de la mise en place Any comment 8211 il semble fonctionner maintenant 8211 vient d'apprendre comment utiliser les données 8211 Merci. Je n'ai plus accès aux données brutes de mon capteur, mais I8217m sûr quand stationnaire le bruit n'a jamais été pire que autour de 10LSB crête à crête. Le bruit pourrait être à une puce défectueuse, erreurs i2c, manipulation de données incorrectes, it8217s pas vraiment quelque chose que je peux diagnostiquer sur Internet. Si vous pouviez fournir une image de la forme d'onde que vous recevez pendant dire un tour de 90 degrés avec le code que vous utilisez, je pourrais être en mesure d'aider un peu mieux. Quelqu'un at-il rencontré ce problème avant que mon MPU6000 fonctionne parfaitement. J'ai ensuite changé quelques choses sur le bus SPI et tout d'un coup l'ACCELZOUTH et ACCELZOUTL ne retourner 0. Tous les registres ci-dessus et en dessous de l'accel-zout a toujours fonctionné. J'ai donc échangé ma puce à un nouveau MPU6000 et puis ça a bien fonctionné. Cependant après que j'ai changé quelque chose sur mon autobus de SPI encore, il a répondu à tout 8230 que je peux le réveiller et il won8217t retourne WhoamI soit même après que j'ai changé tout de nouveau à la manière il était quand il était le dernier travail. Je pense que mon circuit est ok parce qu'il a travaillé pendant des semaines sans problème jusqu'à ce que je joue avec le SPI. Y at-il une chance I8217ve mucked jusqu'à son DMP I8217m seulement en utilisant des valeurs brutes. Le MPU6000 a-t-il une mémoire volatile ou eeprom? Si oui, puis-je le réinitialiser de quelque façon que ce soit? Toute aide ou pitié est appréciée Hmm I8217ve jamais rencontré quelque chose comme ça, mais alors I8217ve jamais utilisé le modèle SPI. Est-ce un changement spécifique qui casse la puce Et je crois que le code DMP est juste stocké à la fin du registre principal volatile registre, et je don8217t pensent qu'il modifierait les valeurs brutes. Hey. Merci pour ton information. I8217m sorte de recrue sur cette zone et tryna comprendre ce que les adresses mémoire est tout au sujet était un peu confus pour moi, mais à la fin de la journée, je suppose que mes compétences de base de base de programmation m'a aidé. Vérité être dit que je suivais une autre étapes donné dans le forum arduino. J'ai obtenu ce MPU6050 basé sur le GY-521 mourir, je ne sais pas si you8217ve vu le site Web de Jeff Rowberg (githubjrowbergi2cdevlibtreemasterArduinoMPU6050), j'espère que oui, pas tryina understimate votre travail, qui semble être vraiment grand. Bien que je n'ai pas encore testé. Il ya des codes et des bibliothèques, mais c'est ce que j'ai fait: Créé le répertoire pour le MPU6050 et I2Cdev dans le répertoire d'installation ArduinoLibraries, mais comme I8217m tryna obtenir une démonstration 3D visuelle du mouvement du conseil, j'ai couru le code MPU6050DMP6.ino et L'erreur affichée (8216Quaternion8217 ne nomme pas un type) est quelque chose I8217ve avoir eu des problèmes avec pour les dernières heures. Certainement est quelque chose au sujet d'une bibliothèque manquante dans le répertoire arduino, la chose est je don8217t savoir quelle autre bibliothèque, j'ai besoin d'ajouter afin d'obtenir ce code de travail. Est-il possible de créer un répertoire sortof de la bibliothèque avec un seul fichier (.h) Si vous avez vu ce site. Pourriez-vous me donner les étapes pour exécuter l'esquisse de traitement dans le site, je veux dire la façon de relier arduino croquis à Traitement 3D esquisse. Ou encore mieux, y at-il de toute façon de lier votre code à un croquis de traitement Cause J'ai vraiment besoin de voir le mouvement board8217s pour voir si cela fonctionne bien. Je me demandais si n'importe qui peut faire le journal brut sur 6 axes et me dire combien d'échantillons vous pouvez obtenir par seconde. Je dois me connecter à 500 échantillons par seconde et Python ne le coupe pas.


No comments:

Post a Comment